Submission #1131752

#TimeUsernameProblemLanguageResultExecution timeMemory
1131752ttamxTortoise (CEOI21_tortoise)C++20
48 / 100
3101 ms193988 KiB
#include<bits/stdc++.h>

using namespace std;

using ll = long long;

const int N=5005;
const int INF=INT_MAX/2;

int n;
int a[N];
int dp[N][2*N];
int aux[2*N];
int r[N],l[N];
bool mark[N];
ll tot;

int main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> a[i];
        if(a[i]==-1){
            mark[i]=true;
        }else{
            tot+=a[i];
        }
    }
    l[0]=-1e7,r[n+1]=1e7;
    for(int i=1;i<=n;i++){
        l[i]=mark[i]?i:l[i-1];
    }
    for(int i=n;i>=1;i--){
        r[i]=mark[i]?i:r[i+1];
    }
    for(int i=0;i<=n;i++){
        for(int j=0;j<=2*n;j++){
            dp[i][j]=-INF;
        }
    }
    int ans=0;
    dp[1][2]=(a[1]>0?1:0);
    for(int i=2;i<=n;i++){
        if(a[i]<1)continue;
        for(int j=0;j<=2*i;j++){
            aux[j]=-INF;
        }
        aux[i+1]=1;
        for(int j=1;j<=n;j++){
            int move=INF;
            for(auto p:{l[i],r[i],l[j],r[j]}){
                move=min(move,abs(i-p)+abs(j-p));
            }
            for(int k=0;k<=2*(i-1)&&k+move<=2*i;k++){
                aux[k+move]=max(aux[k+move],dp[j][k]+1);
            }
        }
        int d=min(i-l[i],r[i]-i);
        int mx=-1;
        for(int st=0;st<=2*i;st++){
            if(aux[st]<=mx)continue;
            mx=aux[st];
            for(int c=0,j=st;c<a[i]&&j<=2*i;c++,j+=2*d){
                dp[i][j]=max(dp[i][j],mx+c);
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=2*i;j++){
            ans=max(ans,dp[i][j]);
        }
    }
    cout << tot-ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...