你是山西煤老板-火车运煤
来源:互联网 发布:刷帮豆软件怎么下载 编辑:程序博客网 时间:2024/06/11 01:13
周末闲来无事,看到一个很有意思的题目,题目是这样的,假设你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大-每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?话说煤老板这年头过的也不是很容易,不过相比程序员来说,还是煤老板享受的机会比我等程序员要好很多~题目看起来很无解,网上也很多人给出了答案和自己的分析过程,能力有限,没有想到最优解,看到有的人给了最优的方式,大致的分享一下自己的思考过程吧。
常见思考方式
本人只想到最常见的思考方式,题目看起来是无解,就是火车一次性运煤到市区基本是空车到市区,没有任何返回,这个时候我想的是能不能中途停留一下,比如说拉到500公里处,拉到之后再回去的拉剩下的煤基本上也是空车,接下来思考的方式就不走那么远,第一次走250公里,可以卸载500吨煤,第二次拉1000吨煤,从250公里处拉到500公里处,卸载500吨煤,第三次拉1000吨煤,然后在500公里处将煤都装上,到达终点处还有500吨煤;这就是我这个懒人能想到的最佳思考方式了,一般来说大家想想都应该没什么问题~那么问题来了,这个究竟不是最佳的思考的方式了,所以最优的结果还是需要验证一下的~
数学思考方式
网上有的人写的很速度,简单点就是中间有两个补给点,第一个补给点1000/5=200,第二个补给点1000/3=333,最后在200+333公路处有1000吨煤,最后剩余的是533吨煤。
上面说的很简单,看完之后我的第一感觉,为毛大家数学都这么好,为什么上来就知道是五次,第二个补给点是三次,不过思考了一阵子之后感觉差不多明白看了意思,假设起点是A,终点是 B:
首先有个隐形条件就是火车煤走一公里需要消耗一吨煤,为了保证最大的到货量,每次肯定是满车走,装满1000吨,现在又3000吨煤,所以最优的办法肯定是只需要拉三次,火车最大的载重是1000吨,相当于在最后一个地点离终点的距离越近,那么最终剩下的煤越多,起始点A有3000吨,最后一站C需要1000吨,那么由此需要一个中间点B点:
------------------------3------------------------->
---------------2--------------->
----1--->
A--------->B--------------->C---------------->D
<------1----
<--------------------2-----------
通过上图可以很容易理解一个问题就是其实就从起始点A到B一次,从A到C一次,从A到D一次,每次1000吨,最终到达终点站:
AB+BC+CD=1000
5AB≥1000
3BC≥1000
CD=1000-AB-BC,CD越短剩下的煤越多,那么很显然AB,BC去临界值,AB=200,BC≈333,最后在D处还有533吨煤;
如果不需要B点,5次直接运到C也可行,5AC≥2000,AC为400,最后的最多剩余的煤为400吨~
个人周末一点个人分析的文章,如果有什么不当的地方,忘大家多包涵~
- 你是山西煤老板-火车运煤
- 山西煤老板买煤--简单新思路
- 山西煤老板用20万1元钱付饭钱
- 为什么山西煤老板开着宝马停在高速公路上斗地主?
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤问题
- 火车运煤智力题
- 《火车运煤问题》分析
- 火车运煤问题分析
- 面试题“火车运煤”
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Div+CSS布局常见问题
- *(leetcode) Construct Binary Tree from Preorder and Inorder Traversal (tree)
- 网址备忘与分享
- 让你的HTML5&CSS3网站在老IE中也能正常显示的3种方法
- 你是山西煤老板-火车运煤
- Intersection of Two Linked Lists
- 第14周项目2(3)
- 黑马程序员——JAVA基础之List集合
- 图结构练习——判断给定图是否存在合法拓扑序列
- ios 线程
- VB6.0 对ACCESS的控制总结——无需控件版(建库,删库,建表,删表,增加行,删除行)
- 使用GCM服务(Google Cloud Messaging)实现Android消息推送
- 4. Dubbo原理解析-代理之接口定义