题意:直线上有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);
}
本文介绍了一种解决特定场景下的最短路径问题的算法。在一条直线上有多个站点,每个站点之间存在一条路并伴随一定的过路费,且每个站点有开放时间限制。文章详细阐述了如何求解司机在不停留的情况下,通过所有站点所需的最小花费。
110

被折叠的 条评论
为什么被折叠?



