51Nod 1288 汽油補給

2021-08-10 03:35:56 字數 1214 閱讀 4863

1288 汽油補給

codility

基準時間限制:1 秒 空間限制:131072 kb 分值: 160 

難度:6級演算法題

有(n+1)個城市,0是起點n是終點,開車從0 -> 1 - > 2...... -> n,車每走1個單位距離消耗1個單位的汽油,油箱的容量是t。給出每個城市到下乙個城市的距離d,以及當地的油價p,求走完整個旅途最少的花費。如果無法從起點到達終點輸出-1。

例如d = , p = ,t = 15,最小花費為41,在0加上10個單位的汽油,在1加滿15個單位的汽油,在2加2個單位的汽油,走到終點時恰好用完所有汽油,花費為10 * 2 + 15 * 1 + 2 * 3 = 41。

input

第1行:2個數n, t中間用空格分隔,n + 1為城市的數量,t為油箱的容量(2 <= n <= 100000, 1 <= t <= 10^9)。

output

輸出走完整個旅程的最小花費,如果無法從起點到達終點輸出-1。

input示例

3 15

10 2

9 18 3

output示例

41
51nod1288 汽油補給

思路:

1.在當前城市p 在油滿的條件下往前尋找首個比城市q的油價低的城市q

(只要找到乙個油價低於p的城市q,則可以在q加油,從而費用最小)

2.對城市p,q的油價比較:若 q<=p,則加 

dpq的油量,否則加滿油

3.汽車行駛到城市q,重複1—3步驟直到到達終點

* 加油過程需考慮以下情況:1.油箱內是否還有油。2.判斷在加滿油的情況下到達終點

是否會剩下油

** 程式設計中需注意 爆資料型別

#includeusing namespace std;

typedef long long ll;

const int max_n=100005;

int n,t;

ll ans;

int d[max_n],p[max_n];

int main()

if(d[k]>t)

int dis=0;

for(int i=k;i=w)elseelse

} }cout<

51nod1288 汽油補給

這不是就noip旅行家的預算嗎。只不過這個每公里消耗一公升油,感覺更簡單了些。貪心,每次找乙個點後面第一油價比它低的點,想辦法到那裡讓油全部用完。找它後面第乙個比它 低的點可以用單調棧處理。include include include using namespace std typedef uns...

51nod 1288 汽油補給

有 n 1 個城市,0是起點n是終點,開車從0 1 2.n,車每走1個單位距離消耗1個單位的汽油,油箱的容量是t。給出每個城市到下乙個城市的距離d,以及當地的油價p,求走完整個旅途最少的花費。如果無法從起點到達終點輸出 1。例如d p t 15,最小花費為41,在0加上10個單位的汽油,在1加滿15...

51nod 1288 汽油補給

有 n 1 個城市,0是起點n是終點,開車從0 1 2.n,車每走1個單位距離消耗1個單位的汽油,油箱的容量是t。給出每個城市到下乙個城市的距離d,以及當地的油價p,求走完整個旅途最少的花費。如果無法從起點到達終點輸出 1。例如d p t 15,最小花費為41,在0加上10個單位的汽油,在1加滿15...