Submission #107896

#TimeUsernameProblemLanguageResultExecution timeMemory
107896SamAndSplit the sequence (APIO14_sequence)C++17
39 / 100
2047 ms132096 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const long long INF = 1000000009000000009;

int n, m;
int a[N];
long long p[N];

long long dp[N][202];
int pp[N][202];
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    for (int i = 1; i <= n; ++i)
        p[i] = p[i - 1] + a[i];
    for (int i = 1; i <= n; ++i)
    {
        for (int k = 1; k <= min(m, i - 1); ++k)
            dp[i][k] = -INF;
    }
    for (int i = 1; i <= n; ++i)
    {
        for (int k = 1; k <= min(m, i - 1); ++k)
        {
            for (int j = 1; j < i; ++j)
            {
                if (dp[j][k - 1] + p[j] * p[i] - p[j] * p[j] > dp[i][k])
                {
                    dp[i][k] = dp[j][k - 1] + p[j] * p[i] - p[j] * p[j];
                    pp[i][k] = j;
                }
            }
        }
    }
    cout << dp[n][m] << endl;
    int i = n;
    for (int k = m; k > 0; --k)
    {
        cout << pp[i][k] << ' ';
        i = pp[i][k];
    }
    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...