zoukankan      html  css  js  c++  java
  • 火车运煤

    群里面一位研二的同学,发了这么一个题目:

    在数轴上的0点你有一个煤矿,煤矿里有3000吨煤,在1000公里处有一个市场,你有一辆小火车,小火车的最大载货量是1000吨,小火车本身每走1公里就需要烧1吨煤,并且小火车可以在任意地点卸货或者装货,问你最多可以运多少吨煤到市场。。。。

    这个题目不是很难,高三的时候就差不多可以解这个题目了,下面开始分析解题:

    首先,将1000吨煤装到小火车上,运行到x1处,将1000-2x1吨卸载下来,然后小火车载着剩下的x1吨煤回到出发点,然后拉上剩下的1000吨煤,继续跑到x1处,又是放下了1000-2x1吨煤,再回来,拉剩下的1000吨煤,注意,这次不需要再回到原点,因此只需要耗费一个x1即可,因此3000吨煤拉到x1点的时候,剩下3000-5(x1-0)吨煤,将剩下的煤拉到x2点,同上面的分析,需要耗费的煤为5*(x2-x1),这儿有一个极限点,那就是到了某个点k的时候,煤就剩下1000吨了,这个时候只能一路拉到市场上去了。

    于是有:

    3000 - 5 * (x1-0) - 5 * (x2 - x1) - ... - 5(xk - xk-1) = 1000

    可以求得xk =  400

    总共长度为1000公里,于是求得最多可以拉的煤为 1000 - 400 = 600吨。

    这个题目很有趣,即k点前面的n个点,任意一个点卸货装货都无关紧要,唯一需要做的是,拉的足量的煤。

    (这个题目是否求解正确,自己也不特别肯定,欢迎指正拍砖)。

    网友xray指出,400公里路之后,还有600公里的路,因此要消耗的是600吨煤,剩下的是400吨煤

    (都把前面复杂的都分析了,就简单的就分析不了,好囧!)

     后来的分析有些错误,经过网友颜沙提醒,首先拉3000吨的时候,必须要装载3次才能够装载过去,于是就存在了来回两次的问题,但是到了2000吨的时候,只需要装载2次就可以过去了,于是只需要1次来回即可,因此求解为:

    3000 - 5 * (x1-0) - 5 * (x2 - x1) - ... - 5(xk - xk-1) = 2000

    2000 - 3 *(xk+1-xk) - 3*(xk+2-xk) - ... - 3(xm - xm-1) = 1000

    可以求解得到xk = 200, xm = 1000/3

    于是就可以剩下的煤为:

    1000 - ( 1000 - 200 - 1000/3) = 1600/3吨煤。

  • 相关阅读:
    Nim or not Nim? hdu3032 SG值打表找规律
    Maximum 贪心
    The Super Powers
    LCM Cardinality 暴力
    Longge's problem poj2480 欧拉函数,gcd
    GCD hdu2588
    Perfect Pth Powers poj1730
    6656 Watching the Kangaroo
    yield 小用
    wpf DropDownButton 源码
  • 原文地址:https://www.cnblogs.com/ubunoon/p/2063249.html
Copyright © 2011-2022 走看看