您的位置:首页 > 理论基础 > 计算机网络

2016 acm香港网络赛 F.Crazy Driver[贪心]

2016-09-13 21:19 260 查看
题意:直线上有n个站点,每个站点间有一条路,这样就是n-1条,每条路都有一个过路费v,每个站点都有一个开放时间t,大于等于t才能通过,问在司机不停的情况下最少要花费多少通过所有站点

思路:比赛时一直想着当时间能通过这个站点的时候就通过,就处理不了最少的了。

应该是,通过每个站点,不足的时间在之前花费最少的路上跑来回,答案就出来了。

#include<bits/stdc++.h>
using namespace std;
#define N 100005
long long n,val
,t
,minn
;
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: