火車運煤問題

火車運煤問題

  • 剛面試問到這個題,可一直沒有爲此類問題準備,差點就回答不出來了

題目內容

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

分析

  • 很顯然每次走全程的話是無法到達終點的,更別說剩餘部分煤。必然把煤全部運到中間某點,然後再繼續運
  • 假設第一次把煤全部運輸到中間某點A,距離爲x,那麼消耗的煤的數量爲5x,因爲要往返兩次,再單程一次把剩下的1000噸運往A點。
  • 如果A點剩餘煤量3000-5x大於2000,那麼下一次假設從A運輸到B,距離爲y,消耗的煤的數量同樣是5y。
  • 如果A點剩餘煤量小於2000,那麼從A到B只需往返一次,再單程一次,消耗煤的數量爲3y。
  • 由此可見,從一點到另外一點距離爲s,中途不折返,如果初始煤量在3000~2000之間,需要消耗5s噸煤
  • 同理得到,s距離不折返初始煤量在2000~1000之間,需要消耗3s噸煤
  • s距離不折返初始煤量在1000~0之間,需要消耗s噸煤
  • 那麼最終的策略爲每次選擇單位消耗最小的方式運輸,第一次消耗5x,第二次消耗3y,第三次消耗z。滿足第一次消耗之後剩餘2000噸,第二次消耗之後剩餘1000噸

結果

  • x=200。轉爲單位消耗3的方式運輸,y=333。轉爲單位消耗1的方式運輸,z=(1000-x-y)= 467。剩餘533噸煤
  • 如果換一種思路,要求n1000噸煤最多可以運輸多遠,那麼有n=1時爲10001,n=2時爲1000(1+1/3)。繼續下去得到傳輸距離爲1000(1+1/3+1/5+...+1/(2*n-1))。級數不收斂,表明只要煤足夠多,能用運輸到足夠遠

  
  

轉載請註明作者:Focustc,博客地址爲http://blog.csdn.net/caozhk,原文鏈接爲點擊打開

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