题目描述

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

这个问题其实是大家想得复杂了,我没看答案,我自己觉得这个题很简单

首先假设最后剩下N吨煤,那么N一定会小于1000,为什么呢,留你自己考虑(随着你看下文,你也会想到为什么)
最后一段运输一定是无往返的,这样才会使得消耗最小,假设最后一段路长为M1距离,那么在最后一段运输起点S1时剩煤N+M1
倒数第二段路,即S1前一段路M2(起点为S2),一定是运输了两次,也就是走了3*M2,在此段的起点剩煤N+M1+3*M2
倒数第三段路,即S2前一段路M3(起点为S3),一定是运输了三次,也就是走了5*M3,在此段的起点剩煤N+M1+3*M2+5M3
……
所以起点零处3000=N+M1+3*M2+5M3+7M4+……
很明显运输过程中每一段路来回趟数越少消费越少,从出发点开始,第一段路应该是运输了3次(3000/1000=3)
故3000=N+M1+3*M2+5M3
总距离1000=M1+M2+M3
第二段路起点处,必然不能大于2000吨,按照来回趟数最少消耗最少的观点,那么第一趟5倍消耗路程应该消耗了1000(3000-2000)吨煤,即距离是1000/5=200公里
同理,第三段路起点处,必然不能大于1000吨,所以第二段路长度为(2000-1000)/3=333.333
最后一段路长为1000-200-333.333=466.666
所以总的剩余即最大可运输到目的地的煤为(最后一段起点的煤1000吨-最后一段路消耗)1000-466.666=533.333