思路就是利用sums[i]表示第一段到第i段路程的距离。
然后枚举从第i个城市传送到第i+k个城市,可忽略的路程就是sums[i+k-1]-sums[i-1],然后用sums[n-1]即总路程不断减去可忽略的路程,与ans比较。
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#define MaxN 1000010
using namespace std;
typedef long long LL;
LL sums[MaxN];
int n,k;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i=1; i<=n-1; i++){
scanf("%d",&sums[i]);
sums[i]+=sums[i-1];
}
LL ans=sums[n-1];//总路程
for(int i=1; i<=n-1; i++){//枚举从哪一个开始传送
int id=min(i+k,n); //超过n的作n处理
ans=min(ans,sums[n-1]-(sums[id-1]-sums[i-1]));//总路程删去不要走的路程
}
cout<<ans<<endl;
return 0;
}