Pagini recente » Cod sursa (job #2678952) | Cod sursa (job #1638134) | Cod sursa (job #2881394) | Cod sursa (job #570201) | Cod sursa (job #2345250)
#include <bits/stdc++.h>
#define MAXN 100005
std::ifstream In ("ferma.in");
std::ofstream Out("ferma.out");
int N, K;
int SP[MAXN], DP[2][MAXN], A[2][MAXN];
void Citire() {
In >> N >> K;
for (int i=1, X; i<=N; ++i)
In >> X, SP[i] = SP[i-1] + X,
A[0][i] = std::max(SP[i], A[0][i-1]);
}
void Rezolvare() {
int t = 0;
for (int i=1, j, Max, Max0; i<=K; ++i, t = 1-t) {
Max = Max0 = 0;
for (j=1; j<=N; ++j)
DP[t][j] = std::max(DP[t][j-1], Max + SP[j]),
Max = std::max(Max, DP[1-t][j] - SP[j]);
if (i!=1) {
for (j=1; j<=N; ++j)
A[t][j] = std::max(A[t][j-1], Max0 + SP[j]),
Max0 = std::max(Max0, A[1-t][j] - SP[j]);
}
}
int Ans = 0;
for (int i=1; i<=N; ++i)
Ans = std::max(Ans, std::max(DP[1-t][i], A[1-t][i] + SP[N] - SP[i]));
Out << Ans << '\n';
}
int main()
{
Citire();
Rezolvare();
return 0;
}