题目链接:P5638 【CSGRound2】光骓者的荣耀 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目大意:
找出最短的
思路:
利用前缀和,找出可以“省去”的路,相减即可
坑点:
注意i的范围,要开 long long
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
long long int a[10005];
int main()
{
long long int n,k;cin>>n>>k;
long long int maxn=-1;
long long int sum[10005];
for(int i=1;i<=n-1;i++)//减去1是因为一条路可以连接两个城市
{
cin>>a[i];
sum[i]=sum[i-1]+a[i];//所有路的长度
}
for(int i=2;i<=n-k;i++)
{
maxn=max(maxn,sum[i+k-1]-sum[i-1]);//找出可以不用走的最长距离
}
cout<<sum[n-1]-maxn<<endl;
return 0;
}
总结:
注意题目要求的数据范围,还有特例情况