火车运煤问题
你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?
以下我自己的答案,请使劲往下找:
首先假设火车每走X公里就返回在拉剩下的煤,起始时X<500,按照如下方式运煤:
将煤分为三份,基本平均即可,每份最少>X,至少两份>2X,将三份命名为A1,A2,A3。
A1运送X公里后卸下A1-2X煤,然后返回
A2运送X公里后卸下A2-2X煤,然后返回
A3运送X公里后,路上消耗X煤
此时该地有煤A1+A2+A3-5X煤...
再走X公里时,需要消耗仍然是5X煤,如果走了Y次,即A1+A2+A3-5X*Y
令X*Y = Z,即3000-5Z
上面计算的情况是需要3车的,所以当变成2000的时候,需要改变计算方法。
即:3000-5Z = 2000 时,需要改变计算方法,此时Z = 200公里,也就是说走了200公里的时候肯定要消耗1000吨煤。
200公里后,就变成了两车。命名为B1,B2
B1运送X公里后卸下B1-2X煤,然后返回
B2运行X公里后消耗X煤
此时该地有煤B1+B2-3X煤,继续这么走Y次消耗是B1+B2-3XY,
领X*Y = Z,即2000-3Z
同样这么走下去之后总煤数会变成1000吨的时候,这个时候一车正好。
2000-3Z = 1000时,Z = 333.33...公里
此时已经经过200+333.33公里,剩余煤1000吨,剩余路程(1000-533.33)公里,需要消耗煤(1000-533.33)吨。
所以最后剩余为1000-(1000-533.33) = 533.33吨
最后,在不考虑其他情况的前提下,只要满足两个点,就符合最优解。
1.200公里处必须停车,在此处必须满足2000吨。
2.533.33公里处必须停车,此处必须满足1000吨。
如果不满足上述两条,那么总有一段路本来可以少一辆车,你却多了一辆车,因而导致耗煤增加。
卸车最少的情况下,第一次走200公里,第二次走333.33公里,第三次走完剩下路程。