A - A Multiply

原题链接

题解

1.选择一个区间,然后加上其和的 c1 倍,所以我们要选中区间和最大的那个
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;
}

posted @   纯粹的  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示