你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?
答案:
-
- 装1000吨煤,走250公里,扔下500吨煤,回矿山。
- 装1000吨煤,走到250公里处,拿起250吨煤继续向前到500公里处,扔下500吨煤,回矿山。此时火车上还有250吨,再加上在250公里处还有250吨煤,所以,火车是可以回矿山的。
- 装上最后1000吨煤,走到500公里处,装上那里的500吨煤,然后一直走到目的。
于是,你最多可以运送500吨煤到市场(当然,火车也回不去了,因为那矿山没有煤了)
533是应该是最优解
另一种分析:
分析:列车一次最多只能运1000吨煤,不难看出当剩余煤在(2000,3000]的时候至少需要运三次,在(1000,2000]的时候运两次,在(0,1000]的时候运一次。
为了减少列车往返的次数,根据上述区间所示,列车中途可设两个停靠点,且其存煤量最好为2000和1000。
计算:设第一个停靠点距起点X,第二个停靠点距起点Y,最终可运达市场煤Z
则5X=1000,3(Y-X)=1000,Z=1000-(1000-Y)=Y
解得:X=200,Z=Y=1600/3=533.33
个人认为类似这种题目并不需要很复杂的数学知识,而更多的是依赖于你的思考,能够很清楚的在脑海中理清前后之间的逻辑关系那样问题就会变得非常简单容易。