AcWing 3493 - 最大的和 - 前缀和
Posted Chivas_/Regal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 3493 - 最大的和 - 前缀和相关的知识,希望对你有一定的参考价值。
题目:
思路:
我们想获取区间内选了之后的sum变化,即选取能让答案增加最多的区间
因此我们就需要两个数值来对比
可以使用两个前缀和
一个是只记录选了1的数的前缀和,一个是记录全选的前缀和
两个前缀和在k的区间内的差值,就是这k个数从只选1到全选之后所能做出的贡献
记录贡献最大值,然后加上第一个前缀和[n]
代码:
const int N = 1e5 + 10;
ll n, k;
ll a[N], b[N], sum1[N], sum2[N];
ll res;
int main(){
read(n); read(k);
for(int i = 1; i <= n; i ++) read(a[i]);
for(int i = 1; i <= n; i ++) read(b[i]),
sum1[i] = sum1[i - 1] + a[i] * b[i],
sum2[i] = sum2[i - 1] + a[i];
for(int i = k; i <= n; i ++)
res = MAX(res, (sum2[i] - sum2[i - k]) - (sum1[i] - sum1[i - k]));
res += sum1[n];
write(res);
return 0;
}
以上是关于AcWing 3493 - 最大的和 - 前缀和的主要内容,如果未能解决你的问题,请参考以下文章