演算法課上老師提出的乙個小問題,試著解決一下。
問題描述:
從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個整數...