Submission #106044

#TimeUsernameProblemLanguageResultExecution timeMemory
106044SaboonSplit the sequence (APIO14_sequence)C++14
22 / 100
3 ms640 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int mod = 1e9 + 7;
const int maxn = 100 + 10;

ll a[maxn], par[maxn], dp[maxn][maxn], m[maxn][maxn];

ll sum(int fi, int se){
	if (fi > se)
		return 0;
	return par[se] - par[fi - 1];
}

int main(){
	ios_base::sync_with_stdio (false);
	int n, k;
	cin >> n >> k;
	k ++;
	for (int i = 1; i <= n; i++){
		cin >> a[i];
		par[i] = par[i - 1] + a[i];
	}
	memset(dp, -63, sizeof dp);
	dp[0][0] = 0;
	for (int i = 1; i <= k; i++){
		for (int j = 1; j <= n; j++){
			for (int x = j - 1; x >= 0; x--){
				ll tmp = dp[i][j];
				dp[i][j] = max(dp[i][j], dp[i - 1][x] + sum(1, x) * sum(x + 1, j));
				if (tmp != dp[i][j])
					m[i][j] = x;
			}
		}
	}
	cout << dp[k][n] << endl;
	int p = k, q = n;
	while (p > 1){
		cout << m[p][q] << " ";
		q = m[p][q];
		p --;
	}
	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...