Submission #1338745

#TimeUsernameProblemLanguageResultExecution timeMemory
1338745javkhlantogsSplit the sequence (APIO14_sequence)C++20
50 / 100
2095 ms31940 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
	ll n,k,i,j,q;
	cin>>n>>k;
	vector<ll> a(n+1);
	vector<ll> pre(n+2,0);
	for(i=1 ; i<=n ; i++) cin>>a[i];
	for(i=1 ; i<=n ; i++) pre[i]=pre[i-1]+a[i];
	vector<vector<ll>> dp(k+1,vector<ll>(n+1,-1e18));	
	vector<vector<ll>> par(k+1,vector<ll>(n+1));
	vector<ll> path;
	for(j=1 ; j<=n ; j++) dp[0][j]=0;
	for(i=1 ; i<=k ; i++){
		for(j=1 ; j<=n ; j++){
			for(q=1 ; q<j ; q++){
				ll val=dp[i-1][q]+pre[q]*(pre[j]-pre[q]);
				if(val>dp[i][j]){
					dp[i][j]=val;
					par[i][j]=q;
				}
			}
		}
	}
	ll u=n;
	for(i=k ; i>=1 ; i--){
		path.push_back(par[i][u]);
		u=par[i][u];
	}
	cout<<dp[k][n]<<"\n";
	for(auto v:path) cout<<v<<" ";
	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...