Pagini recente » Cod sursa (job #2362766) | Cod sursa (job #71674) | Cod sursa (job #1001509) | Cod sursa (job #1948431) | Cod sursa (job #998949)
Cod sursa(job #998949)
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <cassert>
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
#define chmax(a, b) a = max(a, b)
#define chmin(a, b) a = min(a, b)
#define ll long long
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define sz size
#define DBG(X) cerr << X << "\n";
using namespace std;
int N, K;
int dp[1024][10100], x[10100], SP[10100];
int DP(int i) {
for (; i <= K; ++i) {
int best = 0;
for (int j = 1; j <= N; ++j) {
dp[i][j] = max(dp[i][j - 1], SP[j] + best);
chmax(best, dp[i - 1][j] - SP[j]);
}
}
return dp[K][N];
}
int main() {
freopen("ferma.in", "r", stdin);
freopen("ferma.out", "w", stdout);
scanf("%d%d", &N, &K);
for (int i = 1; i <= N; ++i) {
scanf("%d", &x[i]);
SP[i] = SP[i - 1] + x[i];
}
int res = DP(1);
for (int i = 1; i <= N; ++i)
dp[1][i] = max(dp[1][i - 1], SP[i]);
DP(2);
for (int i = 1; i <= N; ++i)
chmax(res, dp[K][i] + SP[N] - SP[i]);
printf("%d", res);
return 0;
}