有(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
#include #include using namespace std;
typedef long long int ll;
const int maxn = 1e5 + 10;
const int maxp = 1e6 + 10;
ll d[maxn];
ll p[maxn];
ll minp[maxn];
ll leftd[maxn];
ll n, t;
int main(int argc, const char * argv)
} p[n+1] = maxp;
ll result = 0;
int pos = -1;
int posleft = -1;
ll sumleft = 0;
ll buf[maxn];
for (int i = 1; i <= n + 1; i++)
else
if (d[buf[j]] > sumleft)
else
else}}
}posleft++;
minp[posleft] = p[buf[pos]];
leftd[posleft] = t - d[buf[pos]] - sumleft;
result += (leftd[posleft] * p[buf[pos]]);
sumleft = t - d[buf[pos]];
pos = 0;
buf[pos] = i;
} }while (posleft >= 0)
cout << result << endl;
return 0;
}
51nod1288 汽油補給
這不是就noip旅行家的預算嗎。只不過這個每公里消耗一公升油,感覺更簡單了些。貪心,每次找乙個點後面第一油價比它低的點,想辦法到那裡讓油全部用完。找它後面第乙個比它 低的點可以用單調棧處理。include include include using namespace std typedef uns...
51Nod 1288 汽油補給
1288 汽油補給 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 160 難度 6級演算法題 有 n 1 個城市,0是起點n是終點,開車從0 1 2.n,車每走1個單位距離消耗1個單位的汽油,油箱的容量是t。給出每個城市到下乙個城市的距離d,以及當地的油價p,求走完整個...
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...