汽車加油問題

2021-09-11 22:13:44 字數 921 閱讀 6691

演算法課上老師提出的乙個小問題,試著解決一下。

問題描述:

從a開到b,一路有n個加油站:1,2,3,...,n。(a地為0,b地為n+1)

d[i]表示i-1和i兩加油站之間的距離

p[i]表示第i個加油站的油價(rmb/km)(p[n+1]=0)i0

1234

56p[i]56

2437

0d[i]04

3523

1求如何加油才能讓總汽油支出最低

我的想法:

首先,一輛車從a開到b會經歷途中的這些所有加油站,也就是說總油錢是

x1 d[1] + x2 d[2] + x3 d[3] + ... + x6 d[6]

其中xi代表第i段距離的油錢開銷,取決於走這一段用的油是在哪個加油站加的,它可能等於上一站的油價p[i-1],也可以等於上好幾站的油價p[i-k]。

總之,d[i]的部分是確定的,我們的操作空間在於要讓d[i]前面的係數是最小的。

最好的情況是,如果我們能直接從油價最低的那個加油站買到全程所需的油,那麼我們的總開銷一定是最小的。但是實際上我們只能一站一站地走,所以我們每遇到乙個油價更便宜(比當前用油便宜)的站,就買那一站的油,要一直夠開到下乙個更便宜的加油站,這樣逐步讓d[i]前面的係數降低。直到我們遇到了乙個最便宜的店,一口氣加滿,開到目的地。

過程就是這樣,對於程式,我們可以先設定乙個變數present,記錄當前我們用的油的價位,然後遍歷整個p陣列,遇到更便宜的店就把present換成更低的油價。

偷個懶,只針對這道題寫了一下:

執行結果:

汽車加油問題

time limit 1000ms memory limit 65536k 有疑問?點這裡 一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明演算法能產生乙個最優解。對於給定的n和k個加油站位置,計算最少加油次數。輸入資料的...

汽車加油問題

汽車加油問題 一輛汽車加滿油後可以行駛n公里,旅途中有加油站,設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。測試用例 7 7 n k 1 2 34 5 1 6 6 第k個加油站與第k 1個加油站之間的距離,其中第乙個代表起點,最後乙個代表終點。輸出 4 最少加油次數 解 汽車加...

汽車加油問題

汽車加油問題 一輛汽車加滿油後可以行駛n千公尺。旅途中有k個加油站。若要使沿途的加油次數最少,設計乙個有效的演算法,指出應在那些加油站停靠加油。資料輸入 由檔案input.txt 給出輸入資料。第一行有2個正整數n和k,表示汽車加滿油後可行駛nkm,且旅途中有k個加油站。接下來1行中,有k 1個整數...