Submission #1131744

#TimeUsernameProblemLanguageResultExecution timeMemory
1131744ttamxTortoise (CEOI21_tortoise)C++20
8 / 100
115 ms150616 KiB
#include<bits/stdc++.h>

using namespace std;

using ll = long long;

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

int n;
int a[N];
int dp[N][N][2*N];
int aux[N];
vector<int> playground;
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){
            playground.emplace_back(i);
        }else{
            tot+=a[i];
        }
    }
    for(int i=0;i<=n;i++){
        for(int j=0;j<=n;j++){
            for(int k=0;k<=2*n;k++){
                dp[i][j][k]=-INF;
            }
        }
    }
    int ans=0;
    dp[1][1][2]=(a[1]>0?1:0);
    for(int i=2;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=0;k<=2*(i-1);k++){
                dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k]);
            }
        }
        if(a[i]<1)continue;
        for(int j=0;j<=2*i;j++){
            aux[j]=-INF;
        }
        aux[i]=1;
        for(int j=1;j<=n;j++){
            int move=INF;
            for(auto x:playground){
                move=min(move,abs(j-x)+abs(i-x));
            }
            for(int k=0;k<=2*(i-1)&&k+move<=2*i;k++){
                aux[k+move]=max(aux[k+move],dp[i-1][j][k]+1);
            }
        }
        int d=INF;
        for(auto x:playground){
            d=min(d,abs(i-x));
        }
        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][i][j]=max(dp[i][i][j],mx+c);
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=0;k<=2*n;k++){
                ans=max(ans,dp[i][j][k]);
            }
        }
    }
    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...