Submission #637576

#TimeUsernameProblemLanguageResultExecution timeMemory
637576danikoynovGroup Photo (JOI21_ho_t3)C++14
44 / 100
5079 ms308 KiB
/**
 ____ ____ ____ ____ ____ ____
||l |||e |||i |||n |||a |||d ||
||__|||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|/__\|

**/

#include<bits/stdc++.h>
#define endl '\n'

using namespace std;
typedef long long ll;

void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

const int maxn = 5010;

int n, a[maxn], dp[maxn], pos[maxn];
void solve()
{
    cin >> n;
    for (int i = 1; i <= n; i ++)
    {
        cin >> a[i];
        pos[a[i]] = i;
    }

    for (int i = 1; i <= n; i ++)
    {
        dp[i] = n * n;
        for (int j = 0; j < i; j ++)
    {
        int st = j + 1, sum = 0;
        for (int k = i; k > j; k --)
        {
            ll cur = pos[k];
            ///cout << i << " " << j << " " << k << " " << cur << endl;
            for (int d = k + 1; d <= i; d ++)
                if (pos[d] > pos[k])
                cur ++;
            for (int d = 1; d <= j; d ++)
                if (pos[d] > pos[k])
                cur ++;
            cur -= st;
            st ++;
            sum = sum + max((ll)0, cur);
        }
        ///cout << i << " " << j << " " << sum << endl;
        dp[i] = min(dp[i], dp[j] + sum);
    }
    ///cout << i << " -- " << dp[i] << endl;

    }
    cout << dp[n] << endl;

}

int main()
{
    solve();
    return 0;
}

#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...