Submission #1333312

#TimeUsernameProblemLanguageResultExecution timeMemory
1333312ricardsjansonsGroup Photo (JOI21_ho_t3)C++20
100 / 100
425 ms98436 KiB
#include <bits/stdc++.h>
#define uset unordered
using namespace std;

const int N=5e3+5;

int s[N][N]{};

int f(int l,int r){
    int k=s[r][r]-s[l-1][r]-s[r][l-1]+s[l-1][l-1];
    return (r-l+1)*(r-l)/2-2*k;
}



int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    int n;cin>>n;
    int a[n+1],dp[n+1]{};
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++){
        for(int j=1;j<n;j++){
            if(a[j+1]<a[j]){
                swap(a[j],a[j+1]);
                s[a[j]][a[j+1]]=1;
                dp[0]++;
            }
        }
    }
    //cout<<dp[0]<<"\n";
    for(int i=0;i<=n;i++){
        for(int j=0;j<=n;j++){
            if(i)s[i][j]+=s[i-1][j];
            if(j)s[i][j]+=s[i][j-1];
            if(i&&j)s[i][j]-=s[i-1][j-1];
            //cout<<s[i][j]<<" ";
        }
        //cout<<"\n";
    }
    for(int i=1;i<=n;i++){
        dp[i]=dp[i-1];
        for(int j=0;j<i-1;j++){
            dp[i]=min(dp[i],dp[j]+f(j+1,i));
            //cout<<i<<" "<<j<<" "<<f(j+1,i)<<"\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...