最大值(前缀和)
第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
*/

浙公网安备 33010602011771号