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吨煤。

  • 相关阅读:
    Distributed System
    APP专项测试之兼容性测试
    面试如何正确谈薪?
    跳槽季,如何做好技术面试准备?
    Appium基础
    设置安装程序位置
    获取文件版本号
    28-PV&PVC
    Docker-文件拷贝
    Kubemark压测常用命令
  • 原文地址:https://www.cnblogs.com/ubunoon/p/2063249.html
Copyright © 2011-2022 走看看