题意描述
题目描述
小 K 打下的江山一共有n个城市,城市i和城市i+1之间有一条双向高速公路连接,走这条路要耗费时间ai。
小 K 为了关心人民生活,决定定期进行走访。他每一次会从1号城市到n号城市并在经过的城市进行访问。其中终点必须为城市n。
不仅如此,他还有一个传送器,传送半径为k,也就是可以传送到i−k和i+k。如果目标城市编号小于1则为11,大于n则为n。
但是他的传送器电量不足,只能传送一次,况且由于一些原因,他想尽量快的完成访问,于是就想问交通部部长您最快的时间是多少。
注意:他可以不访问所有的城市,使用传送器不耗费时间
输入格式
两行,第一行n,k。
第二行n−1个整数,第i个表示ai
输出格式
一个整数,表示答案。
输入:
4 0
1 2 3
输出:
6
输入:
4 1
1 2 3
输出:
3
题意描述可能不清楚,具体的图是数据范围见原链接:洛谷
思路
这是洛谷的一道入门题…一道入门题都让我想了20分钟。由于传送器只能使用一次,所以我们要将传送器使用在距离最远的城市。需要注意的是,如果能够传送的城市范围大于城市的数目,那么最快输出0就可以。
AC代码
#include<iostream>
#include<algorithm>
#include<cmath>
#define IOS ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
const int INF=1e9+7;
ll a[maxn],s[maxn];
int n,k;
int main()
{
IOS;
cin>>n>>k;
for(int i=1;i<=n-1;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
k--;
if(k<0) cout<<s[n-1]<<endl;
else if(k>=n-1) cout<<0<<endl;
else{
ll ma=-INF;
for(int i=k+1;i<=n-1;i++){
ma=max(ma,s[i]-s[i-k-1]);
}
cout<<s[n-1]-ma<<endl;
}
return 0;
}