算法学习-【转】火车运煤算法--全面解析

程老师原文地址:http://flychao88.iteye.com/blog/2187854
原文如下:

你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大――每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?

 

这道题一开始看上去好像是无解的,因为你的火车每一公里就要消耗一吨煤,而到目的地有1000公里,而火车最多只能装1000吨媒。如果你的火车可以全部装下,到目的地也会被全部烧光,一丁点也不剩。所以,很多人的第一反应都是觉得这个不太可能。

 

思考答题是

  1. 装1000吨煤,走250公里,扔下500吨煤,回矿山。
  2. 装1000吨煤,走到250公里处,拿起250吨煤继续向前到500公里处,扔下500吨煤,回矿山。此时火车上还有250吨,再加上在250公里处还有250吨煤,所以,火车是可以回矿山的。
  3. 装上最后1000吨煤,走到500公里处,装上那里的500吨煤,然后一直走到目的。
***********************原文结束,学习笔记开始****************************
看完觉得挺有意思的,其实是挺虐心的。写个程序跑跑吧,求最优值嘛。
分析下题目,包含的条件就是分段卸载,暗含的条件就是火车最后一次可以不返回。
按照上面的分析,要出发三次,返回两次。分别设两点为x,第二点距离第一点为y.
也就是第一次卸载点,经历5次,消耗一车煤。5x=1000.所以x=200.
到达200公里后,还剩下2车煤。3y=1000,y=333.3。剩余煤炭=1000-(1000-533)=533
按着推理。就是一车煤消耗完最终距离。

(1)火车拉1000吨到某一个点,在返回拉剩下的煤到之前的点,一直到拉完全部的煤到该点。

(2)到新的点之后,那么剩下的距离和剩下的煤又可以递归使用(1)中的方法。

(3) 到所剩的煤不足1000吨(也就是火车一次能全不运走)的时候就一次运完,那么减掉路上的消耗就是最后剩下的到B点的煤。

用递归方法可以实现此数学模型,我自己按照理解demo如下:

算法学习-【转】火车运煤算法--全面解析 - bohu83 - bohu83的博客

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bohu83

买个馒头吃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值