Submission #1156394

#TimeUsernameProblemLanguageResultExecution timeMemory
1156394dnnndaGroup Photo (JOI21_ho_t3)C++20
100 / 100
562 ms196564 KiB
#include<bits/stdc++.h> using namespace std; #define S second #define F first #define ll long long //#define int long long //#pragma GCC optimize("Ofast, unroll-loop") //#pragma GCC target("avx,avx2") #pragma GCC optimize("O3") const int inf=0x3f3f3f3f; const ll inff=0x3f3f3f3f3f3f3f3f; //const int X=1000000007; const int X=998244353; int h[5005], cost1[5005][5005], cost2[5005][5005], dp[5005]; signed main(){ ios::sync_with_stdio(0), cin.tie(0); memset(cost1,0,sizeof cost1); memset(cost2,0,sizeof cost2); int n; cin >> n; for(int i=1 ; i<=n ; i++) cin >> h[i]; for(int i=1 ; i<n ; i++) for(int j=i+1 ; j<=n ; j++){ if(h[i]<h[j]){ cost2[1][h[j]]++; cost2[h[i]+1][h[j]]--; } else{ cost1[1][h[i]]++; cost1[h[j]+1][h[i]]--; cost1[1][h[j]]++; cost1[1][h[i]]--; cost1[h[j]+1][h[j]]--; cost1[h[j]+1][h[i]]++; cost2[1][h[j]]++; cost2[1][h[i]]--; cost2[h[j]+1][h[j]]--; cost2[h[j]+1][h[i]]++; } } for(int i=1 ; i<=n ; i++) for(int j=1 ; j<=n ; j++) cost1[i][j]+=cost1[i][j-1], cost2[i][j]+=cost2[i][j-1]; for(int i=1 ; i<=n ; i++) for(int j=1 ; j<=n ; j++) cost1[i][j]+=cost1[i-1][j], cost2[i][j]+=cost2[i-1][j]; for(int i=1 ; i<=n ; i++) for(int j=i ; j<=n ; j++){ //cout << "cost1[" << i << "][" << j << "]=" << cost1[i][j] << '\n'; //cout << "cost2[" << i << "][" << j << "]=" << cost2[i][j] << '\n'; } dp[1]=min(cost1[1][1],cost2[1][1]); for(int i=2 ; i<=n ; i++){ dp[i]=inf; for(int j=0 ; j<i ; j++) dp[i]=min(dp[i],dp[j]+min(cost1[j+1][i],cost2[j+1][i])); //cout << "dp[" << i << "]=" << dp[i] << '\n'; } cout << dp[n] << '\n'; return 0; }
#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...