Submission #602237

#TimeUsernameProblemLanguageResultExecution timeMemory
602237SamAndGroup Photo (JOI21_ho_t3)C++17
100 / 100
647 ms196336 KiB
#include <bits/stdc++.h> using namespace std; #define m_p make_pair #define all(x) (x).begin(),(x).end() #define sz(x) ((int)(x).size()) #define fi first #define se second typedef long long ll; mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); mt19937 rnf(2106); const int N = 5003; void por() { int n; cin >> n; vector<int> v; for (int i = 1; i <= n; ++i) v.push_back(i); do { bool z = true; for (int i = 0; i < n - 1; ++i) { if (v[i] >= v[i + 1] + 2) { z = false; break; } } if (z) { for (int i = 0; i < n; ++i) cout << v[i] << ' '; cout << "\n"; } } while (next_permutation(all(v))); } int n; int a[N]; int b[N]; int l[N][N], r[N][N]; int dp[N]; void solv() { cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; } for (int i = 1; i <= n; ++i) { memset(b, 0, sizeof b); for (int j = 1; j < i; ++j) b[a[j]]++; for (int j = 1; j <= n; ++j) l[a[i]][j] = l[a[i]][j - 1] + b[j]; memset(b, 0, sizeof b); for (int j = i + 1; j <= n; ++j) b[a[j]]++; for (int j = 1; j <= n; ++j) r[a[i]][j] = r[a[i]][j - 1] + b[j]; } for (int x = 1; x <= n; ++x) { int s = l[x][n] - l[x][x]; dp[x] = dp[x - 1] + s; for (int y = x - 1; y >= 1; --y) { s += l[y][n] - l[y][x]; s += r[y][x] - r[y][y]; dp[x] = min(dp[x], dp[y - 1] + s); } } cout << dp[n] << "\n"; } int main() { #ifdef SOMETHING freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); #endif // SOMETHING ios_base::sync_with_stdio(false), cin.tie(0); int tt = 1; //cin >> tt; while (tt--) { solv(); } 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...