Submission #399155

#TimeUsernameProblemLanguageResultExecution timeMemory
399155BERNARB01Split the sequence (APIO14_sequence)C++17
22 / 100
2102 ms95556 KiB
#include <bits/stdc++.h> using namespace std; const int N = 201; int n, a[N]; pair<int, int> to[N][N][N]; long long dp[N][N][N], s[N]; vector<int> ans; long long sol(int l, int r, int k) { if (l == r || k == 0) { return 0; } long long& ret = dp[l][r][k]; if (ret != -1) { return ret; } ret = 0; long long sl = (l ? s[l - 1] : 0); for (int i = l; i < r; i++) { for (int j = 0; j < k; j++) { long long sub = (s[i] - sl) * (s[r] - s[i]) + sol(l, i, j) + sol(i + 1, r, k - 1 - j); if (sub > ret) { ret = sub; to[l][r][k] = {i, j}; } } } return ret; } void bld(int l, int r, int k) { if (l == r || k == 0) { return; } //cout << l << " " << r << " " << k << '\n'; pair<int, int> p = to[l][r][k]; ans.push_back(p.first); bld(l, p.first, p.second); bld(p.first + 1, r, k - 1 - p.second); } int main() { ios::sync_with_stdio(false); cin.tie(0); memset(dp, -1, sizeof dp); int k; cin >> n >> k; for (int i = 0; i < n; i++) { cin >> a[i]; s[i] = a[i] + (i ? s[i - 1] : 0); } cout << sol(0, n - 1, k) << '\n'; bld(0, n - 1, k); for (const auto& x : ans) { cout << x + 1 << " "; } cout << '\n'; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...