arc066E - 加算と減算ハード

トピックリンク

効果の対象に

所与だけ減算し、デジタル式、それに加えブラケットので、その最大値を含みます。

問題解決のためのアイデア

もちろん、マイナス記号のバックを行います括弧内の式の値のみが反転しています。

唯一の入社前は右括弧は括弧を残しています。

そうで(F_0 \)\で何の左括弧がないことを示す\(F_1 \) 現在のレンジが負であることを示していること(F_1 \)\電流が正の領土であることを示しています。

現在の数が負のときは、左括弧の転送を追加することができます。左括弧がある場合、右括弧は、転送に追加することができます。

コード

#include<iostream>
#include<cstdio>
#include<cstdlib>
#define N 100010
#define ll long long
using namespace std;
ll f[3];
void read(ll &x)
{
    x=0;
    int ch=0,flag=1;
    for(;!isdigit(ch);ch=getchar())
    if(ch=='-') flag=-flag;
    for(;isdigit(ch);ch=getchar())
    x=x*10+ch-'0';
    x*=flag;
}
int main()
{
    int n;
    scanf("%d",&n);
    f[0]=0,f[1]=f[2]=-10000000000000ll;
    for(int i=1;i<=n;i++)
    {
        ll x;
        read(x);
        f[0]+=x;
        f[1]-=x;
        f[2]+=x;
        if(x<0)
        {
            f[2]=max(f[2],f[1]);
            f[1]=max(f[1],f[0]);
        }
        f[0]=max(f[0],f[1]);
        f[1]=max(f[1],f[2]);
    }
    printf("%lld\n",f[0]);
    return 0;
}

おすすめ

転載: www.cnblogs.com/Flying2018/p/12203159.html