T 汽油補給

2021-08-04 04:35:36 字數 1138 閱讀 3130

有(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)。 

第2至n + 1行:每行2個數d

i i

, p i

i,中間用空格分隔,分別表示到下乙個城市的距離和當地的油價(1 <= d

i i

, p i

i <= 1000000)。

output

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

sample input

3 15

10 2

9 18 3

sample output

41**如下:

思路都在下面。

#include#include#include#includeusing namespace std;

struct node

a[100005];

long long ans,n,t,d,p;

long long int st=1,ed=1;

long long int cnt;

//a[i].d表示的是該油站最多能加多少的油量,加滿。

//a[i].p表示的是該油站的價錢。

int main()

//如果之前**少於你的**,就拿完你的油量。

//如果之前油量**大於現在的**的油價,就退出,更換**。

for(int i=st; ia[i].p)

cnt+=a[i].d;

else

ed=i;

}//比較存起來的油量夠不夠存滿。

//如果收集來的油量,沒有油箱將存滿,

if(cnt

51nod汽油補給

汽油補給 李陶冶 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 160 有 n 1 個城市,0是起點n是終點,開車從0 1 2.n,車每走1個單位距離消耗1個單位的汽油,油箱的容量是t。給出每個城市到下乙個城市的距離d,以及當地的油價p,求走完整個旅途最少的花費。如果無法從起點到...

51nod1288 汽油補給

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

1288 汽油補給(貪心 單調棧)

1288 汽油補給 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 160 難度 6級演算法題 有 n 1 個城市,0是起點n是終點,開車從0 1 2.n,車每走1個單位距離消耗1個單位的汽油,油箱的容量是t。給出每個城市到下乙個城市的距離d,以及當地的油價p,求走完整個...