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...