火車運煤問題

2021-08-27 15:02:23 字數 1484 閱讀 4448

這個題的解答並不難,有很多網友都給出了答案,但是想說清楚道

理還是比較繞彎。如果想做程式設計做模擬,**很簡單,但是一些邊界條件、中間過程都很繞,所以把這個不是程式設計題的程式設計題放在這裡解答一下,供參考。

根據題意可知有三種運輸方式,分別是成本為5,成本為3,成本為1. 下面簡稱t5,t3,t1.

首先給出最優策略1:用完所有能源,也就是運到終點的能源 + 路上消耗的能源=3000。否則,不論剩餘多少能量,我們總可以後退一點,再多裝一些,按照三種運輸方式之一,多運一點能量到終點。

下面引入運輸能力這個概念:

以t3舉例,從起點向終點方向走2趟,最大可裝載2000,運到距離為delta的某點之後,最大剩餘2000-delta,因此稱t3的運輸能力c3 = 2000-delta <= 2000,(delta >= 0)。也就是說,t3最多能運送不超過2000的能量,超過2000就有剩餘能量.

同理t5的運輸能力c5 = 3000-delta <= 3000,t1的運輸能力c1 = 1000 - delta <= 1000.

這樣,我們就得出最優策略2:在運輸能力範圍內,選用成本最低的方式。用r表示剩餘未被運輸的能量樣,由策略1和策略2可知最優的運送方式:

2000 <= r <= 3000, 用t5方式

1000 <= r <= 2000, 用t3方式

0 <= r <= 1000, 用t1方式

即,先用t5消耗1000,剩餘2000之後用t3方式再消耗1000,最後用t1方式運輸餘下能量。因此最優解為:

t5: 運輸距離 x = 1000/5 = 200

t3: 運輸距離 y = 1000/3 = 333.333

t1: 運輸距離 z =1000 - x - y = 466.667

運送到終點的最大能量 = 1000 - 466.667 = 533.333

證畢.進一步推廣:

首先簡化上面的計算過程:

最大能量 = 1000 - z = 1000 - (1000 - x - y) = x + y = 1000 * (1/3 + 1/5).

現在有初始能量x(假設x可被1000整除,否則可以同理做推廣),按照最優策略1和2可得:

最大需要的運輸能力的方式tmax=x/1000 * 2 - 1

所以,能夠運輸的最大能量 = 1000 * (1/3 + 1/5 + ... + 1/tmax)

用歸納法很容易證明此結論。

因為1/3+1/5+1/7+...是發散的,理論上可以運送任意初始能源x,但是考慮到單程最大能力為1000,所以只要x比1000多一點,就可以用t3方式先運送一點,剩餘採用t1,因此,約束條件為x > 1000.

最後提個問題,如果希望能夠賣到集市上1000噸煤,那麼最少需要初始有多少噸?

你才山西煤老闆!!!

火車運煤問題

本文章 xx公司的一道筆試題,煤礦有3000噸煤要拿到市場上賣,有一輛火車可以用來運煤,火車最多能裝1000噸煤,且火車本身需要燒煤做動力,每走1公里消耗1噸煤,如何運煤才能使得運到市場的煤最多,最多是多少?最優解 1,火車從煤礦出發3次,也即回來2次。這樣可以把3000噸都運出,回煤礦次數越多越費...

火車運煤問題

這個可能是乙個比較經典的智力題了,和以前的那個 賽馬問題 很相似,其題目如下 你是山西的乙個煤老闆,你在礦區開採了有3000噸煤需要運送到市場上去賣,從你的礦區到市場有1000公里,你手裡有一列燒煤的火車,這個火車最多只能裝1000噸煤,且其能耗比較大 每一公里需要耗一噸煤。請問,作為乙個懂程式設計...

火車運煤問題

3次 2次 1次 a 起點 b c d 終點 2次 1次 x y z 為什麼是5x 3y 2000?3000 1000 3,將3000噸煤運離原始地點,至少要運三次,因為運輸的次數越多燒掉的煤就越多,到終點時剩下的煤就越少,所以把煤運離起始地點一定是3次,也就是5x 往3次,返兩次 中間必須停在兩個...