• 【转】火车拉煤问题


    题目:

    你是山西的一个煤老板,你在矿区开采了有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吨煤~

  • 相关阅读:
    第十二章,结束练习
    第十一章,表单
    第十章,表格练习
    第九章,跨行跨列的表格
    第八章,表格
    第七章,列表
    第六章,body当中的属性
    第五章,标签的使用
    6. C# 命名规则
    5. c#变量
  • 原文地址:https://www.cnblogs.com/sunada2005/p/2982314.html
Copyright © 2020-2023  润新知