제출 #637576

#제출 시각아이디문제언어결과실행 시간메모리
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...