CSDN上发现一个面试题及解法记录如下:
你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去 卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一 个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?
思路:
1.确定到底要运几次.
3次. 3000/1000
前两次有往返 , 第三次直接到目的地。
S———————A———————————————B——————————————————E
2.确定每次火车的出发和返回的状态和目的:
2.1第一次出发走SA满载1000,返回不剩煤。SA=x 设第一次出发到达的地点A距起点x公里,目的:在路上消耗往返2x , A地留下第二次往返所需2x和第三次经过时足够支持火车走这段x公里的煤,所以5x=1000,x=200
2.2第二次出发走SB满载1000,返回不剩煤。SB= SA+AB = x + y 设第二次出发到达的地点B距离起点x+y公里,目的:在路上消耗第二次往返和第三次经过时足够支持火车走这段y公里的煤, 所以3y=1000,y约等于333
2.3第三次出发走SE满载1000,SE = 1000=x+y+ BE 直接到目的地E。前x200+y333公里消耗的煤都分别在A点处和B点处补充上了,所以到B时还是满载1000,走完BE 省下 533。
以上解还未说明 为什么第一次出发到A时要留下第二次和第三次经过SA时所需的煤,第三次经过SA时所需的煤在第二次出发到A时留下也行的啊!
考虑这点
我的数学公式求法:
5x>=1000;(第一次往返预留后几次的全部所需的煤时 x=200,预留部分以后往返所需的则 X=1000/n(n<5) 则x>200)
5x+3y =2000; (0<x<400, 0<y<666.6)
x+y = max? (到B时车上有1000t,且此时BE最短 SA+AB最长)
x取值最小时 max 最大