火車運煤問題(馬車運草)問題

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

這道題一開始看上去好像是無解的,因爲你的火車每一公里就要消耗一噸煤,而到目的地有1000公里,而火車最多隻能裝1000噸媒。如果你的火車可以全部裝下,到目的地也會被全部燒光,一丁點也不剩。所以,很多人的第一反應都是覺得這個不太可能。

如果你一開始就覺得不太可能的話,這是很正常的。不過我不知道你還會不會繼續思考下去,如果你不想思考下去了,那麼我很爲你擔憂,因爲你可能並不是一個不善於思考的人,而是一個畏難的人,還有可能是一個容易放棄的人。這對於你做好 一個需要大量思考的工作的程序員來說可能並不適合。

看完上面一段話,就想靠自己思考得出結論,結果昨晚上想着想着睡着了,然後今天就繼續進行思考。哎,說來慚愧,想了好久也沒有找出最佳答案。最後只有上網求助。看了好多答案也沒看明白。最後終於想到了一個我能理解的解釋,現在嚴重懷疑自己適不適合做程序員。

解決思路:
因爲要運送最多的煤到集市,所以要把所有的煤都給運走。火車運送的上限是1000噸,所以需要運送3000/1000 = 3 次。前兩次的運送肯定不是運送到終點,而是把煤放到一箇中間點,然後最後一次進行運送時把所有的煤運到終點。如下圖所示:
在這裏插入圖片描述

要運送最多的煤到B點,則需要在N點時,可以裝載1000噸的煤,所以剩餘的煤爲 1000 - (X+Y),就求x+y的最大值。

先看一下在A點時,當A向B方向出發時,火車是滿載的。當從B的方向回到A點時,A的煤恰好應該是消耗完的。

在看一下M點,在第一次到達M是,火車消耗掉x噸煤,卸掉1000 - 2x噸煤,返回到A點消耗x噸煤。中間怎麼操作好好幾種操作,就不用考慮了,直接看最後一次到達M時,現在火車上應該有1000-x噸煤,M點還剩x噸煤,這樣從M點出發時又會是滿載了。

在看一下N點,在第一次到達時,火車消耗掉了x+y噸煤,卸掉了不知道多少煤,因爲有可能在M點進行補充,返回消耗了x+y噸煤。第二次來時加上剩餘的量應該爲1000噸。

上面就可以看成消耗2000噸煤,把剩餘的1000噸煤,從A點運到N點,即5x + 3y = 2000。以此類推就可以看成消耗1000噸煤把M點的煤運到N點,即 3y = 1000。同理5x = 1000。

求得 x + y = 533

感謝大家,我是假裝很努力的YoungYangD(小羊)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章