Submission #84779

#TimeUsernameProblemLanguageResultExecution timeMemory
84779Mahdi_JfriSplit the sequence (APIO14_sequence)C++14
0 / 100
657 ms1968 KiB
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back

const int maxn = 2e2 + 20;
const int maxk = 2e2 + 20;

int par[maxn][maxk] , sum[maxn];

ll dp[maxn][maxk];

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int n , k;
	cin >> n >> k;

	for(int i = 1; i <= n; i++)
		cin >> sum[i] , sum[i] += sum[i - 1];

	memset(dp , 63 , sizeof dp);
	dp[0][0] = 0;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= n; j++)
		{
			for(int x = 0; x < i; x++)
				dp[i][j] = min(dp[i][j] , (sum[i] - sum[x]) * (sum[i] - sum[x]) + dp[x][j - 1]);
			for(int x = 0; x < i; x++)
				if((sum[i] - sum[x]) * (sum[i] - sum[x]) + dp[x][j - 1] == dp[i][j])
					par[i][j] = x;
		}

	int A = n;
	vector<int> ans;
	for(int j = k + 1; j > 1; j--)
	{
		ans.pb(par[A][j]);
		A = par[A][j];
	}
	reverse(ans.begin() , ans.end());

	cout << (1LL * (sum[n] * sum[n]) - dp[n][k + 1]) / 2 << endl;
	for(auto x : ans)
		cout << x << " ";
	cout << endl;
}

























#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...