제출 #935069

#제출 시각아이디문제언어결과실행 시간메모리
935069haxormanGroup Photo (JOI21_ho_t3)C++14
100 / 100
254 ms197008 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int mxN = 5007;

int arr[mxN], pos[mxN], inv[mxN][mxN], dp[mxN];

int f(int h) {
    if (!h) {
        return 0;
    }

    if (dp[h] != -1) {
        return dp[h];
    }
    
    int ret = INT_MAX, add = 0;
    for (int x = h; x >= 1; --x) {
        add += h - pos[x] + 2*inv[x][h] - inv[x][x];
        ret = min(ret, f(x-1) + add);
    }
    return dp[h] = ret;
}

int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
    int n;
    cin >> n;

    for (int i = 1; i <= n; ++i) {
        cin >> arr[i];
        pos[arr[i]] = i;
    }

    for (int y = 1; y <= n; ++y) {
        int cnt = 0;
        for (int i = 1; i <= n; ++i) {
            if (arr[i] > y) {
                ++cnt;
            }
            inv[arr[i]][y] = cnt;
        }
    }

    memset(dp, -1, sizeof(dp));
    cout << f(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...