Submission #967484

#TimeUsernameProblemLanguageResultExecution timeMemory
967484Halym2007Split the sequence (APIO14_sequence)C++17
0 / 100
2062 ms8432 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define sz size() const int N = 1e5 + 5; ll a[N], dp[N][205], par[N][205]; int n, k; ll sum (int x, int y) { ll ret = 0; for (int i = x; i <= y; ++i) { ret += a[i]; } return ret; } int main () { // freopen ("sequence.in", "r", stdin); // freopen ("sequence.out", "w", stdout); // freopen ("input.txt", "r", stdin); cin >> n >> k; for (int i = 1; i <= n; ++i) { cin >> a[i]; } reverse (a + 1,a + n + 1); // dp[i][j] i-cenli j grupba bolemde maximum value. for (int i = 2; i <= n; ++i) { for (int x = 2; x <= min (i, k + 1); ++x) { for (int j = x - 1; j < i; ++j) { // dp[i][x] = max (dp[i][x], dp[j][x - 1] + sum (j + 1, i) * sum (1, j)); ll val = dp[j][x - 1] + sum (j + 1, i) * sum (1, j); if (dp[i][x] < val) { par[i][x] = j; dp[i][x] = val; } } } } vector <int> cyk; int y = k + 1, x = n; while (1) { x = par[x][y]; if (!x) break; cyk.pb (x); } cout << dp[n][k + 1] << "\n"; assert ((int)cyk.sz == k); for (int i : cyk) { // cout << n - i - 1<< " "; cout << n - i << " "; } 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...