A - A Multiply
题解
1.选择一个区间,然后加上其和的 \(c-1\) 倍,所以我们要选中区间和最大的那个
2.然而由于倍数可能为负,即 \(c<=0\) ,所以这时我们要尽可能选和小的
3.由于最多选一次,意味着也可以不选,所以dp的时候不选就可以赋零
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
    ll n,c;
    cin>>n>>c;
    if(c>0)//选0意味着减少,所以要尽可能选小的减少
    {
        ll sum=0,maxs=0,ans=0;
        for(ll i=1;i<=n;i++)
        {
            ll x;
            cin>>x;
            if(sum+x<=0) sum=0;
            else sum+=x;
            maxs=max(maxs,sum);
            ans+=x;
        }
        cout<<ans+maxs*(c-1);
    }
    else
    {
        ll sum=0,mins=0,ans=0;
        for(ll i=1;i<=n;i++)
        {
            ll x;
            cin>>x;
            if(sum+x>=0) sum=0;
            else sum+=x;
            mins=min(mins,sum);
            ans+=x;
        }
        cout<<ans+mins*(c-1);
    }
    return 0;
}
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号