Submission #1317444

#TimeUsernameProblemLanguageResultExecution timeMemory
1317444comet0Group Photo (JOI21_ho_t3)C++20
12 / 100
300 ms123448 KiB
#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 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...