贮油点问题

来源:互联网 发布:游戏竞猜网站源码 编辑:程序博客网 时间:2024/06/14 20:42

一辆重型卡车欲穿过1000公里的沙漠,卡车耗汽油为1升/公里,卡车总载油能力为500公升.显然卡车装一次油是过不了沙漠的.因此司机必须设法在沿途建立若干个贮油点,使卡车能顺利穿过沙漠.试问司机如怎样建立这些贮油点?每一贮油点应存储多少汽油,才能使卡车以消耗最少汽油的代价通过沙漠?


这是一道非常巧妙的递推的题目,需要进行逆推,就是要从终点开始不断推知前一个贮油点的位置


设终点位置为n0,它的前一个贮油点为n1,那么根据贪心的想法,n1的位置应该在距离终点500公里处(卡车所能行驶的最大距离)


n1的前一个贮油点为n2,n1需要贮存500升油,但是加上路途中的损耗肯定不能一次就能就向n1输送500升油,而是需要从n2进行一次往返和一次单程,共计三次单程才能将500升油输送到n1,那么怎么能在两个贮油点尽量远的前提下(贪心)三次单程将油送到,设两个贮油点最大距离d,(耗油量等于公里数)500-2*d(一次往返的剩余油量将加入n1这个贮油点) 500-d(一次单程的剩余油量),所以 (500-2*d)+(500-d)=500 (n1的贮油量),解得d=500/3,n2需要贮存油1000升


n2的前一个贮油点为n3,n2需要贮存1000升油,但是加上路途中的损耗肯定不能两次就能就向n2输送1000升油,而是需要从n2进行两次往返和一次单程,共计五次单程才能将1000升油输送到n2,那么怎么能在两个贮油点尽量远的前提下(贪心)五次单程将油送到,设两个贮油点最大距离d,(耗油量等于公里数)500-2*d(一次往返的剩余油量将加入n2这个贮油点) 500-d(一次单程的剩余油量),所以 (500-2*d)*2+(500-d)=1000 (n1的贮油量),解得d=500/5,n3需要贮存油1500升


根据这个就可以递推下去……

原创粉丝点击