储油点问题(算法题)

问题:

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

算法分析:

编程计算及打印建立储油点的序号,各储油点距离沙漠边缘的出发距离以及储油量。

高中时期就接触了这个问题,但一直不知道怎么解决,看题解也是一知半解,最近总算看懂了。(本题解建议阅读其他题解后未完全理解后阅读)

问题的核心点有两个:

  1. 需要耗油最少,那么最后到达某个已经存储到指定数量的储油点最好不用回头,接完油只向后续储油点间移动。(由此可知,为了消耗最少的油,则最后一个储油点最佳位置是500km处,此处有500L油即可通过)
  2. 储油点的需求不一定要存满所有预期的油(以最后一个储油点为例,实际需求是到达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即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值