Submission #1359446

#TimeUsernameProblemLanguageResultExecution timeMemory
1359446ivazivaBigger segments (IZhO19_segments)C++20
27 / 100
145 ms2400 KiB
#include <bits/stdc++.h>

using namespace std;

#define MAXN 501

int n,a[MAXN];
long long pref[MAXN];
int maksi[2][MAXN][MAXN];

int32_t main()
{
    ios_base::sync_with_stdio(false);
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n;for (int i=1;i<=n;i++) cin>>a[i];
    pref[0]=0;for (int i=1;i<=n;i++) pref[i]=pref[i-1]+a[i];
    if (n<=20)
    {
        int answer=0;
        for (int maska=0;maska<(1<<n);maska++)
        {
            vector<int> positions;positions.push_back(0);
            for (int bit=0;bit<n;bit++)
            {
                if (maska&(1<<bit)) positions.push_back(bit+1);
            }
            if (positions[(int)positions.size()-1]!=n) continue;
            vector<int> values;
            for (int i=1;i<(int)positions.size();i++) values.push_back(pref[positions[i]]-pref[positions[i-1]]);
            bool valid=true;
            for (int i=1;i<(int)values.size();i++)
            {
                if (values[i]<values[i-1]) {valid=false;break;}
            }
            if (valid) answer=max(answer,(int)values.size());
        }
        cout<<answer<<endl;
        return 0;
    }
    if (n<=500)
    {
        for (int i=1;i<=n;i++)
        {
            for (int j=1;j<=n;j++) maksi[0][i][j]=maksi[1][i][j]=0;
        }
        for (int i=1;i<=n;i++) maksi[0][1][i]=maksi[1][1][i]=1;
        for (int r=1;r<=n;r++)
        {
            for (int l=r-1;l>=1;l--)
            {
                for (int x=l+1;x<=r;x++)
                {
                    if (pref[x-1]-pref[l-1]>pref[r]-pref[x-1]) continue;
                    if (maksi[0][l][x-1]==0) continue;
                    maksi[1][x][r]=max(maksi[1][x][r],maksi[0][l][x-1]+1);
                }
            }
            for (int l=r;l>=1;l--) maksi[0][l][r]=maksi[1][l][r];
        }
        int answer=0;
        for (int l=n;l>=1;l--) answer=max(answer,maksi[0][l][n]);
        cout<<answer<<endl;return 0;
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...