求助,救救孩子吧!
查看原帖
求助,救救孩子吧!
290570
UnderDogStar楼主2020/6/21 12:54

思路就是利用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;
}
2020/6/21 12:54
加载中...