关于火车运煤的一些想法

2024-05-06 12:08
文章标签 火车 想法 运煤

本文主要是介绍关于火车运煤的一些想法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

火车运煤也是个经典的问题了。它的定义如下:

你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?


很多人都知道结果是533.3333。但是这个结果是怎么算出来的,当有4000,或者5000吨煤要运的时候,结果又是多少?这是我这篇博客想讲的东西。

我的解决思路:

想要运最多的煤到集市,很明显这是个贪心算法的问题。它的问题部分是运煤到集市,贪心的部分是运最多的煤。

由于贪心算法的原理,每一个子问题都要是最优的。那么,由于这个火车最多只能装1000吨煤,且每一公里需要耗一吨煤,那么当火车消耗完1000吨煤之后,它对整个问题的贡献是什么?由于消耗了1000吨煤,还剩下了2000吨煤。那么消耗了1000吨煤对问题最大的贡献是把这剩下的2000吨煤整体向前移动了多少公里?这就是一个子问题。

接下来的就很简单了,假设消耗了1000吨,剩下的2000吨整体向前移动了x公里。整个问题就变成了将2000吨煤再运送1000-x公里的距离。那么再消耗1000吨,剩下的1000吨又整体向前移动了y公里。这个时候,只剩下1000吨煤了,火车离集市还有1000-x-y公里。还在想什么,火车直接拉着最后的1000吨煤开向集市吧。

这样,问题就转化成了求x,y的值。这相对就很简单了。

先求x,想象这样一个画面,火车从起点拉了1000吨煤走到了A点,消耗了x吨煤,然后将1000-2x吨煤放下,带着x吨煤往回走,回到起点时,煤正好烧完了,火车变成空的了。再为火车装上1000吨煤,重复上述过程。最大的问题就是这个过程重复了几次?仔细看上述过程就知道,每次火车都要在起点装1000吨煤,总共就3000吨煤,所以火车最多有三次在起点。所以火车有3次从起点到A点,2次从A点到起点。所以x=1000/(3+2)。求出x=200

同理,y=1000/(2+1)。

所以火车最后到达终点时候剩余的煤就等于1000-(1000-x-y)=x+y=533.3333


当要运4000,5000吨煤的时候,很简单,照着上面的思路再算一遍吧。

这篇关于关于火车运煤的一些想法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964306

相关文章

java实训 | 低配版模拟火车订票系统

代码:  import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.util.ArrayList;import java.util.List;public class TrainBookingSystem {private JFrame frame;private JPanel

今天遇到的3到智力面试题(给工人分金条,小鸟来回在2火车之间飞行的距离,精确称水问题)

智力题1:你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费? 答:把金条2次弄断的方式是第一次1,6分,,然后把剩余的6用2,4分,即弄断2次为1段、2段、4段 第一天给1段, 第二天让工人把1段归还给2段, 第三天给1段, 第四天归还1段和2段,给4段。 第五天给1段, 第六天给2

今天写些有用的,关于学习的,和关于40期项目读后感的一些想法

兄弟连这地方,我是越来越喜欢了,这是一个很安静的教育园区,它有点像古代高手休练闭关的地方,绝对能让你练出一身好功夫,同时,难能可贵的是,这个园区的男女比例很平衡,具我身边的小明上网所查,在我们隔壁的教学楼里,有一个空姐培训学院,给祖国培养大批量的专业人才。听他这么说后,我才想起来那天早上看的俩姑娘原来都是未来的空姐啊,那一个个的穿着红制服+黑丝,白静的小脸,170的个头,杨柳细腰,那看了

按自己的想法去理解事件和泛型(C#)

按自己的想法去理解事件和泛型(C#) 上一篇那些年困扰我们的委托(C#)讲了委托,这一篇自然就轮到事件了。 不喜欢官方的表达方式,喜欢按照自己的想法去理解一些抽象的东西,我是一个喜欢简单怕麻烦的人。 事件 考虑到委托使用的一些缺陷,就有了事件。委托是不安全的,打个比方,如果把委托当作共有字段,那么事件就相当于是属性的概念。 事件就是被限制使用的委托变量,事件里面封装了一个多播委托。 事件语法:p

创业公司实习的一些小的想法(原创第400篇)

原创第400篇 2015的 最后一天 写写这段时间的一点想法。。。主要还是关于创业公司的吧 在资本寒冬的情况下  现在创业也越来越难  不仅是要有好的点子  吸引用户 更需要一个好的变现模式   可能是基于此  我们公司做的是一个电商平台 APP中 插入电商入口 用户可以进入商城进行购买 这种模式  不失为一个好的想法 但是对APP的依赖很大  找到好的大流量的合作伙伴显得很重要

hdu 2674(想法+数学)

这题要计算的是N!%2009,0<=N<=10^9。 思路:从1开始累乘,直到乘到因子为N为止,并且在相乘过程中,每相乘一次都mod2009,这样做和把所有1---N因子都乘完后再 mod2009结果是一样的。原因在于每个数都能分为除以2009后的商部分和余数部分。用这个数乘以n,和用这个数除以2009的商乘 以n以及余数乘以n,效果完全一样。商乘以n的部分任然是下一个数商部分;而余

hdu4288--Coder--线段树--离线处理+离散化+想法!

做过的线段树做到现在收获最大的一题~~~ 以后还要多做几遍~~~ 学会了左加右减的位移思想, 学会了离线处理数据, 学会了用lower_bound或者upper_bound寻找hash中某个数值所在的数组下标~~ 整道题的思路和注释都写在代码里了。 //HDU 4288 线段树离线+离散化#include <cstdio>#include <

思维导图,助你化繁为简,结构化知识与想法;用过了就回不去了。MindMaster/XMind...

思维导图 思维导图又叫做脑图,人的大脑很难去记住一些紊乱的数据,脑图就是利用图形化的方式进行发散性思维的一种工具,它把复杂性的知识体系转化为形象化的图形表示,更加形象具体。 帮助理清思路、捕捉灵感、归纳推演、学习和记忆,将纷繁复杂的知识和想法以有序化结构化的方式组织、管理和呈现。 它大概率长下图这样,你可以很直观的通过一张图就掌握整个HTML相关的知识点: 一、使用情景 维导图作为一个

CodeForces 475B Strongly Connected City[想法]

题目链接:http://codeforces.com/problemset/problem/475/B 题目的意思是,给你n条水平固定流向,和m条竖直固定流向的街道,他们互相交叉在一起。。问任意交叉点能不能互相到达。。如下图: 在这里,我们知道,每条路的流向都是已知的。。 那么我们只需要判断外环路能否成环就可以了。。 如果外环路可以成环,那么的话,任意两点就可以到达。否则的话,就

一些关于科技的想法

一、背景 1、自从有了科技,生产力快速发展,可以生产很多以前没有的产品,扩展人的交通、沟通交流、食物生产、物质流通等方面,还能提供超出想象的服务(基因治疗、人造器官、辐射育种、特种材料等等)。 2、有了不断发展的科技,人类的军事和武器发生升级,从冷兵器、热兵器、化学武器到核武器、生物基因武器等等。 3、有了不断发展的科技,粮食和医疗有了飞速发展,人口不断增加。 二、科技发展的可能的原因