제출 #1180789

#제출 시각아이디문제언어결과실행 시간메모리
1180789Szymon_PilipczukGroup Photo (JOI21_ho_t3)C++20
100 / 100
151 ms98584 KiB
#include <bits/stdc++.h>
using namespace std;
#define rep(a,b) for(int a = 0;a<b;a++)
int main()
{
    int n;
    cin>>n;
    vector<int> h(n);
    vector<int> f(n);
    for(int i = 0;i<n;i++)
    {
        cin>>h[i];
        h[i]--;
        f[h[i]] = i;
    }
    vector<vector<int>> c(n);
    rep(i,n) c[i].resize(n);
    rep(i,n)
    {
        int cu = 0;
        for(int j = i+1;j<n;j++)
        {
            if(f[j] < f[i])
            {
                cu++;
                //cout<<j<<" "<<f[j]<<"\n";
            }
        }
        c[i][i] = cu;
        for(int j = i+1;j<n;j++)
        {
            if(f[j] < f[i])
            {
                cu--;
            }
            else
            {
                cu++;
            }
            c[i][j] = cu;
        }
    }
    vector<int> dp(n+1,1e9);
    dp[0] = 0;
    //cout<<c[0][0]<<"\n";
    rep(i,n)
    {
        int cu = 0;
        for(int j = 0;j<=i;j++)
        {
            cu += c[i-j][i];
            dp[i+1] = min(dp[i+1],dp[i-j]+cu);
        }
        //cout<<dp[i]<<" ";
    }
    cout<<dp[n];
    /*
    vector<vector<int>> l;
    vector<vector<int>> r;
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<i;j++)
        {
            if(h[j] > h[i])
            {
                l.push_back(h[j]);
            }
        }
        for(int j = i+1;j<n;j++)
        {
            if(h[j] > h[i])
            {
                r.push_back(h[j]);
            }
        }
        sort(all(l[i]));
        sort(all(r[i]));
    }*/
}
#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...