各路神犇帮我看看这个贪心哪错了,悬关!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 10;
ll n, d;
ll dis[N], sum[N], val[N];
int main() {
// freopen("road.in", "r", stdin);
// freopen("road.out", "w", stdout);
cin >> n >> d;
for (int i = 2; i <= n; i ++) {
cin >> dis[i];
sum[i] = sum[i-1] + dis[i];
}
for (int i = 1; i <= n; i ++) {
cin >> val[i];
}
ll ans = 0;
val[0] = 0x3f3f3f3f;
ll pos = 1, prepos = 0, leftoil = 0;
for (; pos <= n; pos++) {
if (val[pos] < val[prepos]) {
if(prepos!=1)leftoil = (sum[pos] - sum[prepos]) % d;
ans += max(0ll, (ll(ceil(1.0 * (sum[pos] - sum[prepos] - leftoil) / d)))) * val[prepos];
prepos = pos;
}
}
cout << ans << endl;
return 0;
}