【转】火车拉煤问题

题目:

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

 

解:

最优解必然符合以下条件:

1. 火车从起点出发时,车上装满煤(1000t)。

2. 火车回到起点时,车上的煤量为0t。

3. 火车应尽可能少地走回头路。

首先火车肯定要从起点出发3次(因为每次最多运1000)。
所以设火车前两次都运到某点x,卸下1000-2x,然后用x煤回去,第三次到x点时,车上有1000-x,然后装上x点的煤。x处,共有煤3000-5x吨煤。

1)若3000-5x<=1000,直接到终点,用3000-5x=1000的临界条件算得x=400,这也是火车到达终点所剩下的煤。
2)若1000<3000-5x<=2000超过1000,此时与原问题类似,但初始煤变为3000-5x,路程变为1000-x,我们需要选择下一个存煤点,与x点距离y。若想到终点时存煤最多,则x点处也应存煤最多,所以3000-5x=2000,算得x=200。此时,离起点200米处,共存煤2000吨,起点处存煤量为0吨。题目变成了,有2000吨需用火车运送800千米,火车消耗为1号/千米。如此反复,可得(1000-2y)+1000-y=1000,得y=333.3333。此种情况下,终点处存煤可剩533.333吨。

3) 若2000<3000-5x<3000,则火车共需回到x处3次,且第3次无法装满煤。不符合最优解条件。

综上,到终点处最多可剩533.333吨煤~

posted @ 2013-03-26 13:15  myLittleGarden  阅读(1670)  评论(0编辑  收藏  举报