Submission #1155733

#TimeUsernameProblemLanguageResultExecution timeMemory
1155733fatman87878Group Photo (JOI21_ho_t3)C++20
100 / 100
537 ms196376 KiB
#include<bits/stdc++.h>
using namespace std;
#define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit);
#define lb(x) (x)&-(x)
#define all(x) (x).begin(),(x).end()
#define ll long long

constexpr int maxN=5e3+5;

int n,val[maxN],cost[maxN][maxN],cost2[maxN][maxN],dp[maxN];

int main(){
    IOS
    cin>>n;
    for(int i = 1;i<=n;i++)cin>>val[i];
    for(int i = 1;i<=n;i++)for(int j = 1;j<i;j++){
        if(val[j]<val[i]){
            cost[1][val[i]]++;
            cost[val[j]+1][val[i]]--;
        }
        else {
            cost[1][val[i]]++;
            cost[1][val[j]]--;
            cost[val[i]+1][val[i]]--;
            cost[val[i]+1][val[j]]++;
            
            cost2[1][val[i]]++;
            cost2[val[i]+1][val[i]]--;
        }
    }
    for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost[i][j]+=cost[i][j-1];
    for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost[i][j]+=cost[i-1][j];
    for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost2[i][j]+=cost2[i][j-1];
    for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost2[i][j]+=cost2[i-1][j];
    for(int i = 1;i<=n;i++){
        dp[i] = 1e9;
        for(int j = 0;j<i;j++){
            dp[i] = min(dp[i],dp[j]+min(cost2[j+1][i],cost[j+1][i]));
        }
    }
    cout<<dp[n]<<'\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...