#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> a(n);
for (auto &x : a) cin >> x;
vector<int> p(n);
for (int i = 0; i < n; i++) p[a[i] - 1] = i;
vector<unsigned int> m(n, 0);
vector<vector<char>> o(n, vector<char>(n, 0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) continue;
if (p[j] > p[i]) m[i] |= (1u << j);
int x = i + 1, y = j + 1;
if (x < y + 2) o[i][j] = 1;
}
}
const int F = (1u << n);
const int I = 1e9;
vector<vector<int>> d(F, vector<int>(n, I));
for (int i = 0; i < n; i++) d[1u << i][i] = 0;
for (int s = 1; s < F; s++) {
for (int l = 0; l < n; l++) {
if (!(s & (1u << l))) continue;
int c = d[s][l];
if (c == I) continue;
for (int t = 0; t < n; t++) {
if (s & (1u << t)) continue;
if (!o[l][t]) continue;
int a = __builtin_popcount(s & m[t]);
int ns = s | (1u << t);
d[ns][t] = min(d[ns][t], c + a);
}
}
}
int r = I;
for (int l = 0; l < n; l++) r = min(r, d[F - 1][l]);
cout << r;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |