题意:直线上有n个站点,每个站点间有一条路,这样就是n-1条,每条路都有一个过路费v,每个站点都有一个开放时间t,大于等于t才能通过,问在司机不停的情况下最少要花费多少通过所有站点
思路:比赛时一直想着当时间能通过这个站点的时候就通过,就处理不了最少的了。
应该是,通过每个站点,不足的时间在之前花费最少的路上跑来回,答案就出来了。
#include<bits/stdc++.h>
using namespace std;
#define N 100005
long long n,val[N],t[N],minn[N];
int main(){
scanf("%lld",&n);
for(int i=1;i<n;++i){
scanf("%lld",&val[i]);
}
for(int i=0;i<n;++i){
scanf("%lld",&t[i]);
minn[i]=1000001;
}
for(int i=1;i<n;++i){
minn[i]=min(minn[i-1],val[i]);//这个站点之前的花费最小的那条路
}
long long tt=0,ans=0;
for(int i=1;i<n;++i){
tt++;
ans+=val[i];
while(tt<t[i]){
tt+=2;
ans+=2*minn[i];
}
}
printf("%lld\n",ans);
}