제출 #964202

#제출 시각아이디문제언어결과실행 시간메모리
964202Syrius수열 (APIO14_sequence)C++14
50 / 100
2055 ms70836 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ll long long
#define ff first
#define ss second
#define pint pair < int , int >
#define fast ios_base::sync_with_stdio(NULL); cin.tie(NULL)

const int inf = 1e18 + 9;
const int mxn = 1e5 + 2;
const int mod = 1e9 + 7;

int dp[mxn][201] , a[mxn];
int pre[mxn];
int id[mxn][201];

int sq(int x) {
	return x * x;
}

signed main() {

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

	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		pre[i] = pre[i-1] + a[i];
	}

	for (int i = 0; i <= k; i++) dp[0][i] = 0;

	for (int i = 1; i <= n; i++) {
		dp[i][1] = sq(pre[i]);
		for (int j = 2; j <= k+1; j++) {
			dp[i][j] = inf;
			for (int q = 1; q < i; q++) {
				if (dp[i][j] > dp[q][j-1] + sq(pre[i] - pre[q])) {
					dp[i][j] = dp[q][j-1] + sq(pre[i] - pre[q]);
					id[i][j] = q;
				}
			}
		}
	}

	cout << (sq(pre[n]) - dp[n][k+1]) / 2 << '\n';
	int x = id[n][k+1];
	k++;

	while (k > 1) {
		cout << x << ' ';
		k--;
		x = id[x][k];
	}
	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...