我的思路是这样的,只要在当前到某数价钱都为最少,就全买,直到可以到达下一个更小的价钱。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,d,a[100001],b[100001],sum=0,su=0,ans=0;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>d;
for(int i=1; i<n; i++) {
cin>>a[i];
}
for(int i=1; i<=n; i++) {
cin>>b[i];
}
int mi=b[1];
for(int i=2; i<=n; i++) {
if(b[i]<mi) {
su=0;
for(int j=1; j<i; j++) {
su+=a[j];
}
if(su%d!=0) {
su=su/d+1;
} else su=su/d;
ans+=(su-sum)*mi;
// cout<<su<<" "<<sum<<" "<<mi<<" "<<ans<<" ";
mi=b[i];
sum=su;
// cout<<sum<<endl;
continue;
}
}
cout<<ans;
return 0;
}