问题:
一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500升。显然,卡车装一次油是过不了沙漠的。因此,司机必须设法在沿途建立几个储油点,使卡车能够顺利穿越沙漠。试问:司机如何建立这些储油点?每一储油点应储存多少油,才能使卡车以消耗最少汽油的代价通过沙漠?
算法分析:
编程计算及打印建立储油点的序号,各储油点距离沙漠边缘的出发距离以及储油量。
高中时期就接触了这个问题,但一直不知道怎么解决,看题解也是一知半解,最近总算看懂了。(本题解建议阅读其他题解后未完全理解后阅读)
问题的核心点有两个:
- 需要耗油最少,那么最后到达某个已经存储到指定数量的储油点最好不用回头,接完油只向后续储油点间移动。(由此可知,为了消耗最少的油,则最后一个储油点最佳位置是500km处,此处有500L油即可通过)
- 储油点的需求不一定要存满所有预期的油(以最后一个储油点为例,实际需求是到达500km处,卡车里的汽油和此处汽油总共有500L即可保证通过)
此处设最后一个储油点序号为n,不难推出,从n-1个储油点到此处,最少需要往返一次+前往最后一个储油点的一次,所以需要经过两点间距离的3倍距离,故oil(n)=oil(n-1)+3s。
然后考虑到在越靠后的点存油越少,则需要运输消耗的油越少。所以最后一次出发时车内有500L油,经过s到达第n个点时消耗s后可以恰好在第n个点补满达到500L最佳,故3s=500最佳。由此可知s=500/3。n-1号点为333.33最佳,到达此处包含车内所剩汽油为1000L即可。
&spm=1001.2101.3001.5002&articleId=139586235&d=1&t=3&u=943ef5a82e8240e8903e64016d1cb81f)

被折叠的 条评论
为什么被折叠?



