提问+散分,汽车送油问题(11)

zhaolinger2 2011-03-21 05:02:32
问题如下:

小张的汽车最多可以装50个单位的汽油(含自身的油箱中装满的油)。每行驶1千米,将消耗掉1个单位的汽油。
一天小张计划驾车从A地到B地,两地相距100千米。A地汽油紧张,小张在A地准备了1000个单位的汽油,除此以外在A地以及路上再无别的加油站可供加油。小张计划在路中放置一部分的汽油用来中转。
但在出发前,小张从朋友处得知AB地之间有若干个缺油的村庄,当地村民为了得到汽油以维持日常农作机械等需要,集体出资高价向过往车辆收购汽油,收购价格的计算公式为:收购价格(元/单位)=收购地点距离A地的距离(千米)*折算系数(定值)。小张觉得自己准备的油足够,想顺路出售一部分给他们,但是必须保证自己能够到达B地。
假设小张可以在路上的任意地点做汽油中转,并且只有在中转点才能向此处的村民出售部分汽油,请问小张安全到达B地时最多能收入多少钱?

...全文
308 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
justlovetao 2011-04-04
  • 打赏
  • 举报
回复
倒推法!!
疯狂的烤冰 2011-04-02
  • 打赏
  • 举报
回复
这道题说得不太清楚吧?要不也太简单了。5楼正解
hujiey 2011-03-31
  • 打赏
  • 举报
回复
接分。。。。。等待答案
wesweeky 2011-03-31
  • 打赏
  • 举报
回复
acm的、?
alweeq86 2011-03-27
  • 打赏
  • 举报
回复
算不好了 只写了一半 看高手的

int fn2(int LtoA)//运到离A点LtoA处剩下的汽油数
{
int nLast=1000;
if(LtoA==0) return 1000;
for(int i=1;i<=LtoA;i++)
{
int ntemp=(nLast%50==0?nLast/50:nLast/50+1);//全进位

nLast= nLast-ntemp*2+1;
}
return nLast;

}
lf116 2011-03-27
  • 打赏
  • 举报
回复
期待答案,学习
qlovett 2011-03-27
  • 打赏
  • 举报
回复
看到就头大,先知道有这么一个题了,以后遇到了再来看看。。
asz123456 2011-03-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 icerainfc522 的回复:]
这题确实比较复杂 利用计算机编程能算出近似最优解,跟迭代步长有关(此处设1公里,取整型),因为汽车加满一趟油不够跑完全程,因此需要不停反复地将本地的油搬运到前方,然后再次搬运,直到第50公里处至少有50单位的油,第51公里处至少有49单位的油。。。。。
假设P[i]表示在第i公里处最多剩油总量,M[i]表示在第i公里处卖掉多余的油带来的收益,Q[i]表示要到达终点至少需要多少油,显然Q[50……
[/Quote]
测试NULL 2011-03-27
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lijian8552 的回复:]
看这种题目头都疼!!帮顶下!!
[/Quote]
toutou102 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhaolinger2 的回复:]
引用 1 楼 toutou102 的回复:
好像是 950*离A点最远距离的村庄*折算系数=最多收入
A到B总共消耗100单位油,自己车上有50单位,货物为1000单位
减去消耗的 卖掉950就可以咯


……您路上不需要消耗汽油的吗?50单位的汽油怎么够从A到B?
[/Quote]
它的油箱不是有50升油嘛
Tan_yixiu 2011-03-24
  • 打赏
  • 举报
回复
好复杂。。。。。。
icerainfc522 2011-03-24
  • 打赏
  • 举报
回复
这题确实比较复杂 利用计算机编程能算出近似最优解,跟迭代步长有关(此处设1公里,取整型),因为汽车加满一趟油不够跑完全程,因此需要不停反复地将本地的油搬运到前方,然后再次搬运,直到第50公里处至少有50单位的油,第51公里处至少有49单位的油。。。。。
假设P[i]表示在第i公里处最多剩油总量,M[i]表示在第i公里处卖掉多余的油带来的收益,Q[i]表示要到达终点至少需要多少油,显然Q[50]=50,Q[51]=49。。。此后倒推Q[49],Q[48]。。。。,要使得Q[50]=50,Q[49]=(Q[50]/(50-1*2))*50+[(Q[50] mod 50)+1]=51,即Q[i]=(Q[i+1]/(50-1*2))*50+((Q[i] mod 50)+1),一次算出Q[48],Q[47],。。。。。
这里就不考虑最优解了(可能会碰到此类情况,当向前运输油时,如果只剩下1单位油没运时,此时还掉头去运的话的话路上反而需要2单位油,就不划算了,还不如在原地卖掉最后一批剩油后在前进,即要比较运输成本和将最后一批剩油运输到下一站带来的收益,此处就不讨论,有兴趣的朋友可以考虑多个中转站卖油模式), 假设是在某个中转地留购最低油量Q[i]后,剩余的全部卖掉作为收益M[i],即M[i]=(P[i]-Q[i])*i*k(折算系数)
P[0]=1000;P[1]=(50-1*2)*19+(50-1)=961;计算M[1]
P[2]就有两种情况:(1)直接从起点到2,即2=0+2,此时剩油(50-2*2)*19+(50-2)=922;(2)依次搬运1公里前进,即2=1+1,此时剩油(50-1*2)*(P[1]/50)+(P[1] MOD 50-1)=922,计算M[2]
依此类推,题目转化为一个大整数拆分为两个小整数之和问题(N=M+j,0<=j<25,如果一次前进25公里运油,来回50单位的油全耗在路上了,因此最多一次前进24公里,此时每运50单位的油还剩2单位),即若求P[N],先将N=(N-1)+1=(N-2)+2=….(N-24)+24,依次计算将P[N-i]油按运输i公里前进的方式后剩下的油,取P[N]等于其中最优者(最大数),此时可算出M[N]
(示例:100=99+1=98+2=。。=+76+24,分别计算P[99]运1公里剩油、P[98]运2公里剩油、。。。P[76]运24公里剩油,找出最大值作为P[100],算出相应M[100])
依次迭代,可以算出M[1],M[2]。。。。M[100],找出最大值就得答案
zhaolinger2 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 toutou102 的回复:]
它的油箱不是有50升油嘛
[/Quote]

没看题目吧?
题目中说的很清楚,含油箱装满在内,一共只能带50单位汽油,也就是连油箱里的油和装载的油一共只有50单位。
从A到B怎么说至少也要100单位。
接下来不解释了。
BOYin_787 2011-03-24
  • 打赏
  • 举报
回复
Coolfatman 2011-03-23
  • 打赏
  • 举报
回复
感觉比较难,建议小张换辆车。
或者坐火车去,托运汽车,这样要便宜一点。
hengdengshi88 2011-03-23
  • 打赏
  • 举报
回复
见过,ACM中一道题的变形~
Johnxme126 2011-03-22
  • 打赏
  • 举报
回复
这问题好像哪里见过
  • 打赏
  • 举报
回复
lijian8552 2011-03-22
  • 打赏
  • 举报
回复
看这种题目头都疼!!帮顶下!!
加载更多回复(4)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧