3493. 最大的和

双指针维护长度为(k)的区间内未选的数的和的最大值,之后再加上可选的数即可。

const int N=1e5+10;
PII a[N];
int n,k;

int main()
{
    cin>>n>>k;

    for(int i=0;i<n;i++) cin>>a[i].fi;
    for(int i=0;i<n;i++) cin>>a[i].se;

    int l=0,r=0;
    LL sum=0;
    LL ans=0;
    while(r < n)
    {
        while(r < n && r-l < k)
        {
            if(a[r].se == 0) sum+=a[r].fi;
            r++;
        }
        
        ans=max(ans,sum);
        
        if(a[l].se == 0) sum-=a[l].fi;
        l++;
    }
    
    for(int i=0;i<n;i++)
        if(a[i].se == 1)
            ans+=a[i].fi;

    cout<<ans<<endl;
    
    //system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/fxh0707/p/14848694.html