思路
先用sum来代表所有st[i]==1的a[i]加起来
前缀和稍微处理一下就可以了,如果st[i]==1则前缀和s[i]=s[i-1],否则s[i]=s[i-1]+a[i],然后用一个maxx一组组的去比哪个s[i+k-1]-s[i-1]最大,然后输出sum+maxx
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
long long a[N],st[N],n,k,s[N];
long long sum;
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
cin>>st[i];
s[i]=s[i-1];
if(st[i])sum+=a[i];
else s[i]+=a[i];
}
long long maxx=0;
for(int i=1;i+k-1<=n;i++)
{
long long temp=s[i+k-1]-s[i-1];
if(temp>maxx)maxx=temp;
}
cout<<sum+maxx;
return 0;
}