遞推法 穿越沙漠問題

2021-10-25 18:10:58 字數 1946 閱讀 3123

吉普車試圖穿越 x km 寬的沙漠,吉普車耗油率1l/km,**油量 500l,對於 x > 500,吉普車需要設定臨時儲油點,以穿越沙漠。現在,我們需要對於輸入的 x 值,計算最少的耗油量。其中, 0 ≤ x ≤ 3000.

在思考這道題之前,我們先考慮幾個常識性問題:

1、越往沙漠深處的儲油點送油,所消耗的油量更多(在往返的路上必然會消耗更多的油量)

2、要使總耗油量最少,那麼需要使得絕對單位路徑上的長度最小。

(其中,絕對路徑指完全行駛的距離,即不再需要返回。

3、要使得耗油量最少,那麼我們需要滿足以下條件:

a、每次車應該滿載而去,空載而歸

b、從第 i 個儲油點將油送到第 i + 1個必然消耗的比從起點而始耗油量要少。

c、在到達終點的時候,必然有:所有儲油點、車上的油量均為0。

d、儲油點儲存的油量必然是500的整數倍——這一點可由 3.a 推得。

4、考慮將油從第 i 個儲油點送至第 i + 1個的過程:假設需要送 n 趟,那麼在最後一趟時,吉普車到達第 i + 1個儲油點時,這時候,吉普車將沒必要回到前面的儲油點,假設這期間的距離為d,那麼所在運輸中所消耗的油量為 (2n - 1)d。

現在,我們有充足的知識儲備來解決這道題了。

1、根據常識1,最後乙個儲油點應該設定在離終點500km的地方,此時耗油量最少,同時,考慮到在此時車會直接載滿油衝向終點,那麼最後乙個儲油點需要500l油。

2、我們倒推到第二個儲油點。不過在這之前,我們需要證明:若在運輸油的途中,若兩個儲油點間單位路徑耗油量最少,那麼需要將油從第 i 運輸到第 i + 1個儲油點的途中,需要吉普車滿載的次數最少。

證明如下:假設滿載次數為 n ,同時第 i + 1 個除油站需要 500c 的油量,那麼由在途中的往、反累計 2n - 1 次——其中由於在最後將不會回返。那麼設期間距離為 d,那麼易得

而最後乙個儲油點需要500l的油量,那麼從倒數第二個儲油點出發應該至少滿載兩次——行駛途中必然會消耗油量。那麼帶入 n = 2, c = 1,得到 d = 500/3,而兩次滿載,也就意味著從第倒數二個儲油點需要1000l的汽油——即能夠支援從第倒數二個儲油點到終點的汽油量。

同時,我們繼續向後推,便得到倒數第三個儲油點需要至少滿載3次,而得到距離 d =500/5 = 100km,同時我們也能得出它需要1500l汽油支援從其到終點。

那麼,顯然的,我們可以觀察出,在兩個儲油點之間 n - c = 1恒為常數,而 n 與倒數第 i 個儲油點的 i 值成正相關,那麼從終點到由終點起開始計數的第 n 個儲油點的距離為:

現在,考慮在從終點開始數的最後乙個儲油點——它可能會多出一段並不屬於該數列中的長度,我們假設它的儲油點數目是n,那麼由之前的推論可得,它需要500n的油量以支援從該處到達終點。同時,我們有從起點到該處的距離為:

那麼起點需要的滿載的次數滿足:

以下是c語言實現:

#pragma warning(disable : 4996)

#includeint main(void)

while (dis < x);//退出迴圈時,dis >= x,同時儲油點的數量正確

oil = 500 * count + (x - dis) * (2 * count - 1);

//此處的運算思路與我的不同——程式運用了油量必須用完的條件,

//使得條件式:總耗油量油量 = 第乙個儲油點的油量加上路徑上消耗的油量

//其中,由於最後一次小於1/(2n + 1),因此其滿載次數不變。

} printf("%.2f\n", oil);

return 0;

}

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

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

bit 穿越沙漠

參考 無上陽光13的部落格 穿越沙漠 acm.bit.edu.cn 1005 智力題 時間限制 1秒 記憶體限制 64m problem description 一輛吉普車來到 x 公里寬的沙漠邊沿 a 點,吉普車的耗油量為 1 公升 公里,油量為 500 公升。通常,吉普車必須用自身油箱中的油在沙...

演算法之穿越沙漠 獄吏問題

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