一般性火车运煤问题的最优解

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

这个问题可能很多人都见过,把它扩展到一般性,比如初始煤是a0 吨,距离市场s公里,火车容量 c吨,火车能耗k吨/公里,
最多能送到多少吨?

我研究出来了,已经发在我博客上,现在先把题目发在这里,还谁有兴趣可以不看答案试一下,30楼或者3天后发答案。

我随便给一个结果,
functioin geta1(a0,s,c,k){//a0初始值,s距离,c容量,k能耗系数,
//
}

一个例子,geta1(8000,1200,900,0.5),结果 2133.396015748957
...全文
610 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxflywing 2012-10-18
  • 打赏
  • 举报
回复
我觉的这个问题最关键的就是火车容量
比如说3000吨煤时 容量是1000吨,不管跑多远得跑三个来回少一个回程,就是5趟。
当总量少于等于2000吨时,得跑3趟
当总量少于等于1000吨时,只要跑一趟

这样用程序算就简单了

n=(a0/c)进位法取整 '----总量除以容量,得数就是分多少段来算,有余数就多加一段(也就是确定循环次数)
For i = n To 1 Step -1

s = c '----每个循环里,除了有余数的第一段,损耗都是一车煤,
s = a0 - (i - 1) * c '----有余数的第一段,就损耗=余数数量

l = (s / (i * 2 - 1)) / k '----每一段走的路程就是损耗除以来回趟数再除以火车每公里烧掉的煤数

累加l 大于s就跳出循环
重算最后一次损耗,按s-上次的累加值,算出最后一次实际损耗
累加损耗就是知道还剩多少煤了
wxsxiaoK 2012-10-17
  • 打赏
  • 举报
回复
9楼的解释比较简单易懂
e241138 2012-10-17
  • 打赏
  • 举报
回复
看来楼上好多人都没仔细思考啊
zhuyf87 2012-10-17
  • 打赏
  • 举报
回复
可以用动态规划做吧。
kingjo002 2012-10-16
  • 打赏
  • 举报
回复
问题是不是应该一个来回耗煤一顿
E次奥 2012-10-16
  • 打赏
  • 举报
回复
1000t煤,1000km路程,每千米消耗1t煤。

如果返程消耗的煤和运送时消耗的煤一样多,那么这是个舍本生意。

假设,运到一半把煤放着,回去运煤。但是你回去的路程也是500km,现在剩的煤也是500t。

所以要回去必须带上所有剩下的煤。所以一来一回没有煤了。

O(∩_∩)O
  • 打赏
  • 举报
回复
可以这样考虑:为了减少往返运输的损耗,暂存点的储存量应该尽可能是整车数,所以:
起点3000吨,第一储存点2000吨,第二储存点1000吨,然后直接到终点了。
也就是花费1000吨燃料用于起点到第一储存点的往返运输,设路途长为x,3000吨要装3次,最后一次不用返回,所以有5x的行程,5x=1000,求得x=200,同理,求得第二段路途长x=333.33,最终到达终点剩余的数量就是1000-(1000-200-333.33)=533.33。
New_bug 2012-10-16
  • 打赏
  • 举报
回复
这个题目必须考虑一个问题,那就是回程耗煤问题,否则没有现实意义。
wzhiyuan 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

一公里一吨煤 1000公里要1000吨 那去卖什么啊
[/Quote]
直接运到肯定是不行的,可以运到中途卸下来,然后返回原点再装。中途卸下来的可以以后再装上去的。
kingjo002 2012-10-15
  • 打赏
  • 举报
回复
一公里一吨煤 1000公里要1000吨 那去卖什么啊
DeDeWo 2012-10-12
  • 打赏
  • 举报
回复
最小费用最大流入门题
wzhiyuan 2012-10-12
  • 打赏
  • 举报
回复
我们这里按这种题目的惯例,最后一次火车不需要回去了。
  • 打赏
  • 举报
回复
火车不需要回去吗?:)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧