最大值(前缀和)

第1题     最大值 查看测评数据信息

在一个遥远的星球上,有 n 个特殊的饮水器,它们按照从 1 到 n 的顺序排列。每个饮水器都有一个内置的储水罐,初始时第 i 个饮水器的储水罐中有 A[i] 单位的水。

这个星球的居民有一种特殊的能力,他们可以进行不超过 k 次的水流转移操作。每次操作,他们可以选择一个饮水器(编号为 x,满足 1 <= x < n),并将其中的所有水通过特殊管道倒入它后面的一个饮水器(编号为 x+1)。

最终,居民们可以选择任意一个饮水器,并喝掉其中的所有水。现在,他们想知道通过合理的操作,他们最多能喝到多少单位的水。

输入格式

 

第一行一个正整数 n,表示饮水器的数量。

第二行一个非负整数 k,表示操作次数的上限。

第三行 n 个非负整数,用空格隔开,表示每个饮水器初始的储水量 A[1], A[2], ..., A[n]。

保证 1<=n<=1e6,0<= k <=n-1,0<= A[i]<= 1e3

 

输出格式

 

一行,仅一个非负整数,表示居民们最多能喝到的水的单位数。

 

输入/输出例子1

输入:

10

5

890 965 256 419 296 987 45 676 976 742

 

输出:

3813

 

样例解释

 

 

考场秒想到,不讲了。

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;

int n, k;
long long a[N], s[N], ans=0;
int main()
{
	scanf("%d%d", &n, &k);
	for (int i=1; i<=n; i++) 
	{
		scanf("%lld", &a[i]);
		s[i]=s[i-1]+a[i];
	}
	for (int i=1; i+k<=n; i++) ans=max(ans, s[i+k]-s[i-1]);
	
	printf("%lld", ans);
	return 0;
}
/*
10 5
890 965 256 419 296 987 45 676 976 742 


3813
*/

  

posted @ 2024-07-14 20:49  cn是大帅哥886  阅读(13)  评论(0编辑  收藏  举报