Submission #1331349

#TimeUsernameProblemLanguageResultExecution timeMemory
1331349cow123Group Photo (JOI21_ho_t3)C++20
100 / 100
392 ms165396 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 pref[maxn][maxn],f[maxn][maxn],dp[maxn],gdzie[maxn];
int oblicz(int px,int kx,int py,int ky){
    return (pref[kx][ky] - pref[px - 1][ky] - pref[kx][py - 1] + pref[px - 1][py - 1]);
}
int funkcja(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){
            int wart = 0;
            if(gdzie[j] < gdzie[i]){wart = 1;}
            pref[i][j] = pref[i][j - 1] + wart + pref[i - 1][j] - pref[i - 1][j - 1];
        }
    }
    FOR(i,1,n + 1){
        int suma = 0;
        for(int j = i; j >= 1;--j){
            suma+= oblicz(j,j,i + 1,n);
            f[i][j] = suma;
            suma+= oblicz(j,i,j - 1,j - 1);
        }
    }
    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]);
        }
    }
    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...