제출 #1161306

#제출 시각아이디문제언어결과실행 시간메모리
1161306brintonGroup Photo (JOI21_ho_t3)C++20
44 / 100
5094 ms2884 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> isReverse; int getReverse(int l,int r){ int ret = 0; for(int i = l;i <= r;i++){ for(int j = i+1;j <= r;j++){ if(isReverse[i][j]){ // if isReverse, we don't reverse it,subtract1 ret--; }else{ // else cost add ret++; } } } return ret; } int main(){ cin.tie(0); ios_base::sync_with_stdio(0); //start here int N; cin >> N; vector<int> v(N+1); vector<int> loc(N+1); for(int i = 1;i <= N;i++){ cin >> v[i]; loc[v[i]] = i; } isReverse = vector<vector<int>>(N+1,vector<int>(N+1,0)); int total = 0; for(int i = 1;i <= N;i++){ for(int j = i+1;j <= N;j++){ if(loc[i] > loc[j]){ isReverse[i][j] = 1; total++; } } } vector<int> dp(N+1,0); dp[0] = 0; for(int i = 1;i <= N;i++){ // chose a range to reverse for(int j = i;j >= 1;j--){ int cost = getReverse(j,i); // cout << j << " " dp[i] = min(dp[i],dp[j-1]+cost); } } // for(int i = 1;i <= N;i++)cout << loc[i] << " ";cout << endl; // for(int i = 1;i <= N;i++)cout << dp[i] << " ";cout << endl; // cout << total << endl; cout << total+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...