原题链接AcWing 5308. 公路https://www.acwing.com/problem/content/5311/
算法标签:贪心
分析思路:可采用逆向的思维,先把需要的油欠着,再在前面已经经过的站中最便宜的站进行加油。
代码实现:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 100010;
int n, d;
int v[N], a[N];
int main()
{
scanf("%d%d", &n, &d);
for (int i = 1; i < n; i ++ ) scanf("%d", &v[i]);
for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);
LL res = 0, oil = 0, dist = 0;
int price = a[1];
for (int i = 2; i <= n; i ++ )
{
dist += v[i - 1];
LL t = (dist + d - 1) / d - oil;
res += t * price;
oil += t;
price = min(price, a[i]);
}
printf("%lld\n", res);
return 0;
}