您的位置:首页 > 其它

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

2016-04-11 18:24 302 查看
程老师原文地址:http://flychao88.iteye.com/blog/2187854原文如下:你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大――每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市? 这道题一开始看上去好像是无解的,因为你的火车每一公里就要消耗一吨煤,而到目的地有1000公里,而火车最多只能装1000吨媒。如果你的火车可以全部装下,到目的地也会被全部烧光,一丁点也不剩。所以,很多人的第一反应都是觉得这个不太可能。 思考答题是:装1000吨煤,走250公里,扔下500吨煤,回矿山。
装1000吨煤,走到250公里处,拿起250吨煤继续向前到500公里处,扔下500吨煤,回矿山。此时火车上还有250吨,再加上在250公里处还有250吨煤,所以,火车是可以回矿山的。
装上最后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如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: