面試題:火車運煤問題

encienqi發表於2011-05-03

你是山西的一個煤老闆,你在礦區開採了有3000噸煤需要運送到市場上去賣,從你的礦區到市場有1000公里,你手裡有一列燒煤的火車,這個火車最多隻能裝1000噸煤,且其能耗比較大——每一公里需要耗一噸煤。請問,作為一個懂程式設計的煤老闆的你,你會怎麼運送才能運最多的煤到集市?

答案:

裝1000噸煤,走250公里,扔下500噸煤,回礦山。 裝1000噸煤,走到250公里處,拿起250噸煤繼續向前到500公里處,扔下500噸煤,回礦山。此時火車上還有250噸,再加上在250公里處還有250噸煤,所以,火車是可以回礦山的。 裝上最後1000噸煤,走到500公里處,裝上那裡的500噸煤,然後一直走到目的。

於是,你最多可以運送500噸煤到市場(當然,火車也回不去了,因為那礦山沒有煤了)

533是應該是最優解

 

另一種分析:
分析:列車一次最多隻能運1000噸煤,不難看出當剩餘煤在(2000,3000]的時候至少需要運三次,在(1000,2000]的時候運兩次,在(0,1000]的時候運一次。
為了減少列車往返的次數,根據上述區間所示,列車中途可設兩個停靠點,且其存煤量最好為2000和1000。
計算:設第一個停靠點距起點X,第二個停靠點距起點Y,最終可運達市場煤Z
則5X=1000,3(Y-X)=1000,Z=1000-(1000-Y)=Y
解得:X=200,Z=Y=1600/3=533.33
個人認為類似這種題目並不需要很複雜的數學知識,而更多的是依賴於你的思考,能夠很清楚的在腦海中理清前後之間的邏輯關係那樣問題就會變得非常簡單容易。

相關文章