제출 #1001367

#제출 시각아이디문제언어결과실행 시간메모리
1001367aaaaaarroz수열 (APIO14_sequence)C++17
0 / 100
2023 ms15960 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main() {
    ll n, K;
    cin >> n >> K;
    vector<ll> arr(n);
    for (ll &a : arr) cin >> a;
    vector<ll> prefix(n + 1, 0);
    for (ll i = 0; i < n; i++) {
        prefix[i + 1] = prefix[i] + arr[i];
    }
    vector<vector<ll>> dp(n + 1, vector<ll>(K + 1, LLONG_MIN));
    vector<vector<ll>> prev(n + 1, vector<ll>(K + 1, -1));
    dp[0][0] = 0;
    for (ll k = 1; k <= K; k++) {
        for (ll i = k; i <= n; i++) {
            for (ll p = 0; p < i; p++) {
                ll current_sum = prefix[i] - prefix[p];
                if (dp[p][k - 1] != LLONG_MIN && dp[p][k - 1] + current_sum * (prefix[n] - current_sum) > dp[i][k]) {
                    dp[i][k] = dp[p][k - 1] + current_sum * (prefix[n] - current_sum);
                    prev[i][k] = p+1;
                }
            }
        }
    }
    cout << dp[n][K] << endl;
    vector<ll> splits;
    ll pos = n;
    ll current_k = K;
    while (current_k > 0) {
        pos = prev[pos][current_k];
        splits.push_back(pos);
        current_k--;
    }
    reverse(splits.begin(), splits.end());
    for (ll split : splits) {
        cout << split << " ";
    }
    cout << endl;
    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...