bit 穿越沙漠

2021-06-12 13:41:37 字數 1510 閱讀 3699

參考:無上陽光13的部落格 穿越沙漠 acm.bit.edu.cn 1005 智力題

時間限制: 1秒 

記憶體限制: 64m

problem description

一輛吉普車來到 x 公里寬的沙漠邊沿 a 點,吉普車的耗油量為 1 公升 / 公里,**油量為 500 公升。通常,吉普車必須用自身油箱中的油在沙漠中設定若干個臨時儲油 點,才能穿越沙漠的。假設在沙漠邊沿 a 點有充足的汽油可供使用,那麼吉普車從 a 點穿過這片沙漠到達終點 b ,至少要耗多少公升油。請編寫乙個程式,計算最少的 耗油量(精確到小數點後 3 位)。 

( 1 )假設吉普車在沙漠中行進時不發生故障; 

( 2 )吉普車在沙漠邊沿 a 點到終點 b 的直線距離為 x ≧ 500 公里 ( 即沙漠寬度 ) ;

input

輸入的第一行含乙個正整數 k ,表示測試例的個數。後面緊接著 k 行,每行對應乙個測試例,包含乙個正整數 x ,表示從 a 點到 b 點的距離( 1<=x<=2000 )。

output

每個測試例對應一行輸出,包含乙個數,表示最少的油耗量(精確到小數點以後 3 位)。

sample input2

5001000

sample output

500.000

3836.497

這也算是乙個經典的題目了。很多地方都有敘述。我就大體按照我的理解再說說好了

如果正著推導的話,呵呵,根本不可能做出來,因為我們不知道後邊會發生什麼東西-。-!所以只好逆推。這是最基本的思路。

好的現在我們開始想了。最後的部分,最後500m,不需要中間停頓什麼的,直接滿載500l油衝到底,這就要求在離終點500m處運有乙個臨時儲油點,為了建造這個離終點500m處的臨時儲油點呢,我們需要在遠一點再建乙個。在什麼地方呢?我們知道如果建立乙個有500l油的儲油點,一次運送肯定是不夠的,至少需要兩次。因為車的容量只有500l麼。假設最後的500m處的是a點,那麼為了建造a儲油點,我們必須有b儲油點,現在就是b->a,a->b,b->a建造完畢。既然我們要求在路上消耗最小,那麼三趟運輸就是最省的了。這樣的話,a點有500l油,運送三次,消耗一車油,就是b點有1000l,過程就是從b拉500l,跑過500/3公尺,在a出放下500/3的油,用剩下的500/3跑回b,然後載上500l跑到a,消耗500/3,放下500/2,這樣a就有500l了。

所以我們可以看到了,需要在距離a點500/3的地方建造1000l的油點。建造1000l就至少跑5趟了,所以在距離b店500/5的地方需要乙個1500l的c,以此類推,直到起點為止。最後處理一下起點那裡邊邊角角的問題就好了

#includeint main()

} tem = dis - tem + 500/(2*i+1);

printf("%.3f\n",500*i + tem * (2*i+1));

} return 0;

}

遞推法 穿越沙漠問題

吉普車試圖穿越 x km 寬的沙漠,吉普車耗油率1l km,油量 500l,對於 x 500,吉普車需要設定臨時儲油點,以穿越沙漠。現在,我們需要對於輸入的 x 值,計算最少的耗油量。其中,0 x 3000.在思考這道題之前,我們先考慮幾個常識性問題 1 越往沙漠深處的儲油點送油,所消耗的油量更多 ...

FZU 1076 穿越沙漠(水 )

description 一輛吉普車來到x公里寬的沙漠邊沿a點,吉普車的耗油量為1公升 公里,油量為500公升。通常,吉普車必須用自身油箱中的油在沙漠中設定若干個臨時儲油點,才能穿越沙漠的。假設在沙漠邊沿a點有充足的汽油可供使用,那麼吉普車從a點穿過這片沙漠到達終點b,至少要耗多少公升油。請編寫乙個程...

穿越沙漠問題,飛機加油問題

一輛吉普車來到1000km寬的沙漠邊沿。吉普車的耗油量為1l km,油量為500l。顯然,吉普車必須用自身油箱中的油在沙漠中設幾個臨時 加油點,否則是通不過沙漠的。假設在沙漠邊沿有充足的汽油可供使用,那麼吉普車應在哪些地方 建多大的臨的加油點,才能以最少的油耗穿過這塊沙漠?本題是乙個極值問題,要求具...