50pts代码:
#include <bits/stdc++.h>
#define long long int
using namespace std;
const int N=1e5+10;
int n,d,dis,price[N],pre[N];
vector<int> v;
int main(){
cin>>n>>d;
for(int i=2;i<=n;i++){
scanf("%d",&dis);
pre[i]=pre[i-1]+dis;
}
for(int i=1;i<=n;i++) scanf("%d",&price[i]);
v.push_back(1);
int minv=price[1];
for(int i=2;i<=n;i++){
if(minv>price[i]){
v.push_back(i);
minv=price[i];
}
}
if(v[v.size()-1]!=n) v.push_back(n);
int left=0,ans=0;
for(int i=0;i<v.size()-1;i++){
int real=pre[v[i+1]]-pre[v[i]];
if(left>real) left-=real;
else{
real-=left;
int num=ceil(real*1.0/d);
ans+=price[v[i]]*num;
left=num*d-real;
}
}
cout<<ans;
return 0;
}