运煤问题

来源:互联网 发布:软件维护招标评分标准 编辑:程序博客网 时间:2024/04/29 05:30

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

http://coolshell.cn/articles/1202.html

这道题应该是逆推吧 发表一下我的拙见。
终点D,中间点C,中间点B,起点A。
首先为了满足火车运到某个中间点可以卸下一定量的煤并返回,应保证每次运输的距离小于500,这样起点和终点直接至少存在2个中间点。
为了减少煤的损耗,每次运输时应满载,故在C点应有1000吨煤,而为了让C点有1000吨煤,需要火车从B点到C点走3次(2次去,一次回)。
而B点储存的煤应该是1000的2倍,所以从B运到C共损失1000吨煤,BC=1000/3;
为了使B点储存2000吨煤,需要从A点到B点往返5次(3次去,2次回),A点有3000吨煤,从A到B损失1000吨煤,则AB=1000/5;
AB=200;BC=333.33333;那么CD=1000-AB-BC=466.6666;
所以最终剩余1000-CD=533.3333吨煤
如果是4000吨煤,每次最大运输也是1000吨煤,则分4段路程,设3个节点
总的想法是让火车每次往前运煤都尽量处于满载状态


我的解法可以剩533吨。
0-533公里内,每次搬一公里。
第一阶段,0-200公里,每公里去3趟,回2趟,消耗5吨,到第200公里剩2000吨;
第二阶段,200-533公里,每公里去2趟,回1趟,消耗3吨,到第533公里剩1001吨;
最后,装上剩下的1000吨(丢掉1吨),直接开往终点,消耗467吨;最后剩533吨。


第一次载上1000吨煤到200处,卸下600吨,回来,煤耗光
再次载上1000吨,如上步骤
第三次将最后的1000吨煤载上,到达200处,此时消耗200吨煤,目前200处煤有2000吨
载上1000吨煤,开到1000/3+200处,卸下1000-2000/3吨煤,再返回200处,载上剩下的1000吨煤到1000/3+200处,此时总共有1000(1000-2000/3+1000-1000/3)吨煤
剩下路程为800-1000/3,则最终剩下的煤为200+1000/3约等于533.333…

0 0