Submission #879917

#TimeUsernameProblemLanguageResultExecution timeMemory
879917iskhakkutbilimSplit the sequence (APIO14_sequence)C++17
50 / 100
2058 ms32860 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define int long long
#define ff first
#define ss second
#define all(a) a.begin(), a.end()
const int mod = 1e17;
const int N = 1e5;
 
/*
 7 3
 4 1 3 4 0 2 3 
*/
signed main(){
	//ios::sync_with_stdio(0);
	//cin.tie(0); cout.tie(0);
	int n, k; cin >> n >> k;
	vector< vector<int> > dp(n + 1, vector<int>(k + 2, -mod));
	vector< vector<int> > where(n + 1, vector<int>(k + 2, -1));
	vector<int> a(n + 1, 0);
	for(int i = 1;i <= n; i++) cin >> a[i];
	vector<int> suff(n + 2, 0), pref(n + 1, 0);
	suff[n] = a[n];
	for(int i = 1;i <= n; i++) pref[i] = pref[i-1] + a[i];
	for(int i = n-1;i >= 1; i--) suff[i] = suff[i + 1] + a[i];
	
	
	
	
	dp[0][0] = 0;
	k++;
	for(int i = 1;i <= n; i++){
		for(int sub = 1; sub <= k; sub++){
			for(int j = i; j >= 1; j--){
				int pr = pref[i] - pref[j-1];
				if(dp[i][sub] < dp[j-1][sub-1] + (suff[i+1] * pr)){
					dp[i][sub] = dp[j-1][sub-1] + (suff[i + 1] * pr);
					where[i][sub] = j - 1;
				}
			}
			
		}
	}
	vector<int> path;
	cout << dp[n][k] << '\n';
	int idx = n;
	for(int j = k; j > 0 && idx > 0; j--){
		if(where[idx][j]) cout << where[idx][j] << ' ';
		idx = where[idx][j];
	}
	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...