Submission #655270

#TimeUsernameProblemLanguageResultExecution timeMemory
655270benjaminkleynSplit the sequence (APIO14_sequence)C++17
28 / 100
2096 ms74692 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int N, K, a[100001];
ll pref[100001] = {0};
ll dp[100001][201];
int last_split[100001][201];

int main()
{
    cin >> N >> K;
    for (int i = 1; i <= N; i++)
    {
         cin >> a[i];
         pref[i] = pref[i-1] + a[i];
    }

    for (int k = 1; k <= K; k++)
        for (int i = 1; i <= N; i++)
        {
            dp[i][k] = 0;
            for (int j = 0; j < i; j++)
                if (dp[j][k-1]+pref[j]*(pref[i]-pref[j])>dp[i][k])
                {
                    dp[i][k] = dp[j][k-1] + pref[j] * (pref[i] - pref[j]);
                    last_split[i][k] = j;
                }
        }

    cout << dp[N][K] << '\n';

    int i = N;
    do
    {
        i = last_split[i][K--];
        cout << i << ' ';
    } while (last_split[i][K] > 0);
    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...