Submission #1331345

#TimeUsernameProblemLanguageResultExecution timeMemory
1331345cow123Group Photo (JOI21_ho_t3)C++20
64 / 100
5099 ms196144 KiB
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i = a; i < b;++i)
#define pi pair<int,int>
#define pb push_back
using namespace std;
const int maxn = 5005;
int tab[maxn][maxn],pref[maxn][maxn],dp[maxn],gdzie[maxn];
int f(int a,int b,int n){
    int suma = 0;
    for(int i = a; i >= b;--i){
        int dol = pref[i][i - 1] - pref[i][b - 1];
        int gora = pref[i][n] - pref[i][a];
        suma+=gora + dol;
    }
    return suma;
}
int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin>>n;
    FOR(i,0,n){
        int x;
        cin>>x;
        gdzie[x] = i;
    }
    FOR(i,1,n + 1){
        FOR(j,1,n + 1){
            if(gdzie[j] < gdzie[i]){tab[i][j] = 1;}
        }
    }
    FOR(i,1,n + 1){
        FOR(j,1,n + 1){
            pref[i][j] = pref[i][j - 1] + tab[i][j];
        }
    }
    FOR(i,0,n + 1){
        dp[i] = 1e9;
    }
    dp[0] = 0;
    FOR(i,0,n){
        FOR(j,i + 1,n + 1){
            dp[j] = min(dp[j],dp[i] + f(j,i + 1,n));
        }
    }
    cout<<dp[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...