题目描写叙述例如以下:

你是一个煤老板。你在矿区开採了3000吨煤,须要运送到市场上去卖,从你的矿区到市场有1000公里。你手里有一列以煤为动力的火车。这个火车一次最多能运1000吨煤,火车每公里消耗一吨煤。

问怎样运送才干运最多的煤到集市?

========== -.- ==========

思考时间

========== -.- ==========

从题中非常easy能看出一个矛盾:路程是1000公里。最多运1000吨煤,显然不能直接走。假设直接走的话,不仅没有煤能送过去,并且还会剩下一大堆煤在原地。

所以肯定是要把原地的煤全都利用起来。所以须要设立中转站。

那么问题就变成了须要几个中转站。各在什么位置?

先从简单入手,首先先在正中间位置,即500公里处设一个中转站,看看有没有什么效果。

为了达到"运最多的煤到终点"的目的,肯定是不应该有煤留在原地的。

所以一開始肯定是要把煤都拿出来,由于一共同拥有3000吨煤,所以第一次搬1000吨出发。到了500公里处剩下500,可是为了可以回去,500吨煤必须所有带回去。

所以第一趟白费力气,浪费了1000吨。

第二个1000吨也是如此。

运第三个1000吨的时候,由于不须要再回去,所以如今得情况是,火车有500吨煤,离终点500公里。所以这种中转站没有不论什么用处。最后能运的煤是0。

可是上述的想法还是能有非常多启示的。从题面能够看出。必须设立中转站。而从上述失败的运送办法中能够看出:设立中转站的目的是,我们得让全部煤不断地靠近终点。

尽管来回跑更费煤,可是煤总量十分过剩,而运载量有限。所以要以"来回跑"的方式让煤不断接近终点。

我们还要明白一点:假如路上一共同拥有N个中转站,我们首先要在起点和第一个中转站来回跑直到运空煤。然后在第一二个中转站之间来回跑,直到把煤运空。跨站运煤并不会更优,跨站是一样的或者更加浪费。

那么一个完美的试探方案就出来了:既然不跨站,那就直接观察当前状态,假设火车与终点之间加上中转站会更优,那就加上去。否则直接走。

那么我们将中转站设在400公里处呢?第一趟来回消耗800吨,中转站留下200吨。第二趟来回消耗800,中转站留下200吨。

第三趟直接过来,到达中转站还剩600吨。如今火车离终点600公里。且火车所属的中转站有1000吨煤。

直接出发,最后成功运送400吨到终点站。

一開始因为距离足够远,显然是要来回跑让全部煤更靠近终点。当距离不太远时就得做出选择了:来回跑以搬运全部煤。还是一次性带上尽可能多的煤直接走。

设距离为X公里。

当前煤有R吨。

当R<=1000,显然是直接走。

当1000<R<=2000时。要走3趟(过去、回来、过去),非常easy能写出公式:(1000-2x) + (R-1000)-x > 1000-x。解得X<(R-1000)/2时来回跑更优。否则带上1000吨直接走。
当2000<R<=3000时,要走5趟。解得当X<(R-1000)/4时来回跑,否则带上1000吨直接走。

当我们每隔250米设一个中转站时,最后能运送的煤是500吨。这是我当时以为的最优结果了。

当时脑袋没有转过来,过了好久才找到比500还要大的方案。

靠直觉来推測中转站的位置和数量,从而慢慢得到最优解显然不是什么好主意。我们知道来回跑太费煤,所以能不来回跑就不来回跑。初始化煤有3000吨。第一回合肯定是5趟来回,设运了X公里。X显然<500(參考上文的第一想法)。所以第一回合结束后剩下的距离>=500米。

所以假设有更优解。第二回合肯定不是直接走。

那么至少还会有第二个中转站了。这个时候的思路很关键,我们须要先推断一回合后的剩余煤量然后才干依次做出最优选择。

①如果一回合后剩余煤<=1000吨。那么第二回合直接走,方程例如以下:

y = Max[3000-5x-(1000-x)] = 2000-4x

由于3000-5x<=1000,所以x>=400,所以y<=400

②如果一回合后剩余煤量依然>2000

假设是这样的情况,说明第一回合走的路相当短。

我们知道,当结果>2000吨时,中间过程分一次还是多次是一样的。

比方第一回合走了100公里,剩余煤2500吨。这和分别走两个50公里或4个25公里是同样的。若剩余2000吨以上火车还是要继续5趟5趟的搬运,所以我们直接把多段合并成一段,一样的。

所以我们不考虑情况②

③如果一回合后剩余煤量在1000吨和2000吨之间

通过情况2的分析,我们发现事实上仅仅会有①③两种情况。我们还发现。当R处于同一大段的时候,多次和一次的结果是同样的。所以情况③我们也是不断的运煤直到煤量剩余1000吨。然后直接走。

这样看来就是3回合了。

第一回合运了2000吨煤到中转站,消耗1000吨,由于5x=1000,所以第一回合走了200米。

第二回合运了1000吨煤到中转站。消耗1000吨煤,由于3x=1000。所以第二回合走了1000/3米。

第三回合带着1000吨煤直接走。经过前面的运送,还剩下1000-200-1000/3=1400/3公里,所以终于剩余1000-1400/3=1600/3≈533吨。

因为是边思考边写博客,思路可能有点乱 -.-

转载于:https://www.cnblogs.com/mfmdaoyou/p/7130277.html

经典智力题:火车运煤相关推荐

  1. 也谈《火车运煤》问题

    今日在酷壳看到一篇比较经典的<火车运煤>的智力题 你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最 ...

  2. 面试真题:经典智力题最详汇总(中)

    前言 大家好,我是小七,下面我来说说我朋友给我分享的一些面试真题中的智力题,他目前是腾讯微信的一名算法工程师.前几天整理了一些面试中常见的经典智力题面试真题:经典智力题最详汇总(上) ,没想到获得了3 ...

  3. 几个程序员面试题:火车运煤问题、赛马问题

    火车运煤 这个可能是一个比较经典的智力题了,和以前的那个<赛马问题>很相似,其题目如下: 你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000 ...

  4. 关于火车运煤的一些想法

    火车运煤也是个经典的问题了.它的定义如下: 你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨 ...

  5. 面试真题:经典智力题最详汇总

    前言 同学们只要掌握了整理的这些智力题解答思路,以后面试再遇到智力题,一可以嘎嘎乱杀,如果不能那你过来把我的头打歪. 秋招不是要来了嘛,需要面试技巧的朋友点--[思维导图]--即可! 1. 掰巧克力问 ...

  6. 由火车运煤问题想到的

    Technorati 标签: 面试题, 火车运煤 本文版权所有,转载请注明出处和作者联系方式. 作者:孙华明 联系方式: wormsun at gmail.com 今天在酷壳网站上看到一道面试题--火 ...

  7. 《火车运煤问题》分析

    作者:陈太汉 <火车运煤问题>分析 题目内容: 你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多 ...

  8. 火车运煤问题 - 增加一个简单算法实现

    火车运煤问题 你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大--每一公里 ...

  9. 面试题:火车运煤问题

    面试题:火车运煤问题 来源:http://www.xymyeah.com/165.html 你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手 ...

最新文章

  1. [JavaScript] JavaScript 运算符与流程控制
  2. 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)
  3. halcon python 联合开发_使用pythonnet调用halcon脚本
  4. SQL -- 是否或推断线相交以在其内部的平面
  5. 关于网页的一些小知识点
  6. 函数防抖 和 函数节流
  7. 启动hadoop时报root@localhost's password: localhost: Permission denied, please try again.错误。...
  8. 数据库设计:数据库设计的基本步骤介绍
  9. python数组的使用
  10. android:#FFFFFFFF 颜色码解析
  11. nodemon运行 提示错误:无法加载文件 C:\Users\gxf\AppData\Roaming\npm\nodemon.ps1,因为在此系统上禁止运行脚本。
  12. 操作 神通数据库_神通数据库命令行
  13. EditText属性整理
  14. 爱心打印函数(基于EasyX图形库)
  15. Zigbee物联网应用
  16. 本科studying abroad 无法毕业申请硕士转学转校处理一切studying abroad 问题
  17. jzy3D从入门到弃坑_4尝试使用jzy3D1.0画图失败
  18. 基于语料库的汉语形容词宾语与名词句法语义关系分析
  19. leetcode (Longest Harmonious Subsequence)
  20. html5 在线 ppt 制作软件,HTML5 幻灯片相册制作工具(HTML5 Slideshow Maker)

热门文章

  1. adb命令查看手机电量_adb获取电池信息以及电量消耗信息
  2. ble mac地址 协议_让BLE设备的名称包含MAC地址
  3. Win10系统,如何使用系统自带截图工具 “PrintScreen键“
  4. QT中QFile读写txt乱码问题|Windows10
  5. dsp和通用计算机的区别,汽车dsp和功放区别
  6. 在win10本地开发springboot项目能上传图片,并能通过URL直接从浏览器访问,但是部署到服务器上后能上传文件,但是通过浏览器无法访问图片
  7. 『辞旧迎新』一个只会写Bug的Coder年终总结
  8. 正版 Windows 10安装教程
  9. 无锁编程与分布式编程那个更适合多核CPU?
  10. Windows 10 自动创建direct热点,正常WiFi热点无法开启