Submission #1312422

#TimeUsernameProblemLanguageResultExecution timeMemory
1312422neonglitchGroup Photo (JOI21_ho_t3)C++20
64 / 100
5070 ms195988 KiB
#include <iostream> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; int a[n+1],pos[n+1]={0}; for(int i=1;i<=n;i++)cin>>a[i],pos[a[i]]=i; int dp[n+1]={0}; int left[n+1][n+1]={0}; int cst[n+1][n+1]={0}; int pre[n+2]={0}; int ppre[n+2]={0}; for(int i=0;i<=n;i++) { for(int j=0;j<=n;j++) { left[i][j]=1; cst[i][j]=0; } } for(int i=0;i<=n;i++)dp[i]=1e9; dp[0]=0; for(int l=1;l<=n;l++) { cst[l][l]=1; for(int r=l+1;r<=n;r++) { cst[l][r]=cst[l][r-1]; for(int p=l;p<=r;p++) { cst[l][r]+=(pos[r]<=pos[p]); } } } for(int i=0;i<=n;i++) { // length of suffix fixed // cout<<"For "<<i<<' '<<dp[i]<<endl; for(int j=0;j<=n;j++)pre[j]=left[i][j]; for(int j=n-1;j>=0;j--)pre[j]+=pre[j+1]; for(int j=0;j<=n;j++)ppre[j]=pre[pos[j]]; for(int j=1;j<=n;j++)ppre[j]+=ppre[j-1]; for(int p=1;p<=n-i;p++) { int fe=n-i,le=p; int sm=dp[i]; sm+=ppre[fe]-ppre[le-1]-cst[le][fe]; if(sm<dp[n-p+1]) { dp[n-p+1]=sm; for(int j=0;j<=n;j++) { if(p<=a[j] and a[j]<=n-i) { left[n-p+1][j]=0; } else{ left[n-p+1][j]=left[i][j]; } } } } } cout<<dp[n]<<endl; }
#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...