Submission #321264

#TimeUsernameProblemLanguageResultExecution timeMemory
321264shart23수열 (APIO14_sequence)C++14
50 / 100
2070 ms32384 KiB
#include <bits/stdc++.h>

#define int long long
#define all(x) x.begin(), x.end()

using namespace std;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n, k;
    cin >> n >> k;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        a[i] += a[i - 1];
    }
    k++;
    vector<vector<int>> dp(k + 1, vector<int>(n + 1, -1));
    vector<vector<int>> prev(k + 1, vector<int>(n + 1, -1));
    dp[0][0] = 0;
    for (int j = 1; j <= k; j++) {
        dp[j][0] = 0;
        for (int i = j; i <= n; i++) {
            for (int i1 = i - 1; i1 >= 0; i1--) {
                if (dp[j - 1][i1] == -1) {
                    continue;
                }
                int val = dp[j - 1][i1] + a[i1] * (a[i] - a[i1]);
                if (val > dp[j][i]) {
                    dp[j][i] = val;
                    prev[j][i] = i1;
                }
            }
        }
    }
    int ans = dp[k][n];
    cout << ans << '\n';
    vector<int> path;
    int now = n;
    for (int i = k; i >= 2; i--) {
        now = prev[i][now];
        path.push_back(now);
    }
    reverse(all(path));
    for (int el : path) {
        cout << el << ' ';
    }
    cout << '\n';
}
/*
7 3
4 1 3 4 0 2 3
 */
#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...