This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int maxn = 1000 + 10;
int a[maxn], par[maxn], dp[maxn][maxn], m[maxn][maxn];
int sum(int fi, int se){
if (fi > se)
return 0;
return par[se] - par[fi - 1];
}
int main(){
ios_base::sync_with_stdio (false);
int n, k;
cin >> n >> k;
k ++;
for (int i = 1; i <= n; i++){
cin >> a[i];
par[i] = par[i - 1] + a[i];
}
memset(dp, -63, sizeof dp);
dp[0][0] = 0;
for (int i = 1; i <= k; i++){
for (int j = 1; j <= n; j++){
for (int x = j - 1; x >= 0; x--){
int tmp = dp[i][j];
dp[i][j] = max(dp[i][j], dp[i - 1][x] + sum(1, x) * sum(x + 1, j));
if (tmp != dp[i][j])
m[i][j] = x;
}
}
}
cout << dp[k][n] << endl;
int q = m[k][n];
int idx = k - 1;
while (q != 0){
cout << q << " ";
q = m[idx--][q];
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |