老闆運煤問題及解決方案

2021-09-08 08:08:05 字數 1567 閱讀 3217

最近在網上看到了老闆運煤的問題,感覺挺有意思的。就把自己的想法寫了出來,共大家參考,看大家有沒有更好的解決思路。

問題是這樣的:

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

由於火車一次最多只能運1000噸煤,而且每運一公里火車要消耗掉一噸煤,如果第一次運1000噸煤,運了1000公里,到了終點,火車的煤也消耗完了,顯然這樣是不行的,所以運到某乙個位置要把煤解除安裝下來,然後回去再運剩下的,另外還要注意的是火車回去也要消耗煤的,這是乙個反覆的過程,關鍵是確定這個位置,另外還有乙個最優的問題,也就是說火車每次運的時候都盡可能的運最多的煤。

假設火車第一次運1000噸煤,走了500公里,消耗了500噸,還剩下500噸煤,如果解除安裝一些煤下來,火車就回不去了,如果不解除安裝,剛好能回到出發點,因為回去畢竟也要消耗掉500噸煤,這樣根本就運不到煤,所以火車第一次解除安裝的煤的地點距離出發點一定要少於500公里。

如果火車第一次運1000噸煤,走了250公里,解除安裝了500噸煤,這樣剛好能回去運剩下的,同樣第二次也解除安裝了500噸,由於第三次不用回去了,所以運到250公里的時候火車上還有1000-250=750噸煤,加上前兩次解除安裝的煤

那麼第一次解除安裝煤的地點如何確定呢,考慮到最優化策略,假設距離出發點x公里的地點開始解除安裝煤,那麼一次解除安裝煤為 1000-2x,同理第二次解除安裝煤也為1000-2x,那麼第三次運到x公里處火車上煤為1000-x,那麼到此所有剩下的煤為1000-2x+1000-2x+1000-x=3000-5x,考慮到最優化策略,3000-5x應該是1000的整數倍,這樣才能達到火車每次都運做多的煤,

顯然應是2倍,即3000-5x=2000 ,所以x=200公里,這是剩下的煤為2000噸。那麼剩下的就是把這2000噸煤再運800公里就到了目的地。同理假設再運1000噸煤到y公里處開始解除安裝煤,那麼有1000-2y+1000-y=1000,那麼y =1000/3公里,剩下煤1000噸,剩下的距離為1000-200-1000/3=466.66...公里,那麼最終到目的地剩下的煤為1000-466.666=533.33噸。

因此步驟應該是:

首先運到200公尺處,剩2000噸煤

再次運到1000/3公尺處,剩1000噸煤

最後運到目的地,剩533.333噸煤

對於這一類問題,如果是4000噸煤呢?如何

第一次解除安裝煤x公里,則 1000-2x+1000-2x+1000-2x+1000-x=4000-7x=3000(為什麼是3000呢,根據最優化策略,應該是1000的整數倍,最大取3000),那麼x=1000/7公里,也就是剩下3000噸煤。

第二次解除安裝煤再往前走y公里,則1000-2y+1000-2y+1000-y=2000 ,則y=200公里,剩下2000噸煤,

第三次解除安裝煤再往前走z公里,則1000-2z+1000-z=1000,則z=1000/3公里,剩下1000噸煤,那麼剩下的路程呢,為1000-1000/7-200=4600/7公里,

那麼到目的地剩下的煤為1000-4600/7=2400/7噸

智慧型配煤解決方案,焦化行業產能提公升解決方案

伴隨我國上游煤炭行業和下游鋼鐵行業的供給側改革與結構性調整,導致企業盈利壓力增大,引入數位化轉型使能降本增效將是煤焦化企業的必然選擇。華為雲攜手中國煉焦行業協會 煤科院 首鋼院和鑫磊集團 煜祺網路,共同構建焦化行業智慧型配煤解決方案。華為雲將先進演算法和充足算力與焦化企業的工藝 生產資料和焦化行業的...

KYLIX相關問題及解決方案

1 安裝問題 安裝時用.setup.sh m 安裝就不會出現問題了 2 安裝完後在中文下介面不能正常顯示的問題 就是 usr local bin 下的 startbcb startdelphi startkylix三個檔案指令碼,分別在其指令碼的倒數 第三行 就是還沒開始執行程式的地方 加插下面一句...

快取穿透問題及解決方案

快取穿透也被稱為 擊穿 很多朋友對快取穿透的理解是 由於快取故障或者快取過期導致大量請求穿透到後端資料庫伺服器,從而對資料庫造成巨大衝擊。這其實是一種誤解。真正的快取穿透應該是這樣的 在高併發場景下,如果某乙個key被高併發訪問,沒有被命中,出於對容錯性考慮,會嘗試去從後端資料庫中獲取,從而導致了大...