Submission #855395

#TimeUsernameProblemLanguageResultExecution timeMemory
855395vjudge1Split the sequence (APIO14_sequence)C++17
39 / 100
2029 ms7708 KiB
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <numeric>
#include <sstream>
#include <cassert>
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <fstream>
#include <unordered_map>
using namespace std;
typedef long long ll;
typedef long double ld;
#define all(x) x.begin(),x.end()
#define pb push_back

const int maxn = (int)2e5 + 13;
const ll inf = (long long)1e18 + 20;
int n,a[maxn],k;
ll dp[1001][1001],suf[maxn],pref[maxn],pr[1001][1001];
void solve(){
	cin >> n >> k;
	for(int i = 1 ; i <= n ; i ++){
		cin >> a[i];
		pref[i] = pref[i - 1] + a[i];
	}
	for(int i = n ; i >= 1 ; i --){
		suf[i] = suf[i + 1] + a[i];
	}
	for(int i = 1 ; i <= n ; i ++){
		dp[1][i] = pref[i] * suf[i + 1];
	}
	for(int kol = 2 ; kol <= k ; kol ++){
		for(int i = kol ; i < n ; i ++){
			pr[kol][i] = i - 1;
			for(int j = 1 ; j < i ; j ++){
				ll x = dp[kol - 1][j] + (pref[i] - pref[j]) * suf[i + 1];
				if(dp[kol][i] < x){
					dp[kol][i] = x;
					pr[kol][i] = j;
				}
			}
		}
	}
	ll mx = 0,ind = 0;
	for(int i = k ; i <= n ; i ++){
		if(mx < dp[k][i]){
			mx = dp[k][i];
			ind = i;
		}
	}
	cout << mx << "\n";
	vector<int>v;
	v.pb(ind);
	int ok = pr[k][ind];
	while(ok){
		v.pb(ok);
		ok = pr[--k][ok];
	}
	for(int i = v.size() - 1 ; i >= 0 ; i --){
		cout << v[i] << ' ';
	}
}
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t = 1;
	//cin >> t;
	while(t --){
		solve();
	}
	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...