题解 P6568 【[NOI Online #3 提高组]水壶】

\(n\) 个容量无穷大的水壶,它们从 \(1\sim n\) 编号,初始时 \(i\) 号水壶中装有 \(A_i\) 单位的水。

你可以进行不超过 kk 次操作,每次操作需要选择一个满足 \(1\le x\le n-1\) 的编号 xx,然后把 xx 号水壶中的水全部倒入 \(x+1\) 号水壶中。

最后你可以任意选择恰好一个水壶,并喝掉水壶中所有的水。现在请你求出,你最多能喝到多少单位的水。

显然答案 \(=\) 长度为 \(k+1\) 的区间和中的最大值。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template<typename T>inline void read(T &FF){
	T RR=1;FF=0;char CH=getchar();
	for(;!isdigit(CH);CH=getchar())if(CH=='-')RR=-1;
	for(;isdigit(CH);CH=getchar())FF=(FF<<1)+(FF<<3)+(CH^48);
	FF*=RR;
}
const int N=1e6+10;
ll n,k,s[N],a[N],ans;
int main(){
	read(n);read(k);
	for(int i=1;i<=n;i++)read(a[i]),s[i]=s[i-1]+a[i];
	for(int i=k+1;i<=n;i++)ans=max(ans,s[i]-s[i-k-1]);
	cout<<ans;
	return 0;
}
posted @ 2020-10-17 09:05  zhaohaikun  阅读(192)  评论(0编辑  收藏  举报