Pagini recente » Cod sursa (job #1434449) | Cod sursa (job #476880) | Cod sursa (job #516464) | Cod sursa (job #575057) | Cod sursa (job #758175)
Cod sursa(job #758175)
#include <fstream>
#include <cstdio>
using namespace std;
#define MaxN 10111
#define MaxK 1030
ifstream F("ferma.in");
ofstream G("ferma.out");
int N,K,nc,V[MaxN];
int S[MaxN],D[MaxK][MaxN];
int main()
{
F>>N>>K;
for( int i=1;i<=N;++i)
{
F>>V[i];
S[i]=S[i-1]+V[i];
}
F.close();
for( int i=1;i<=K;++i)
{
int best=0;
for( int j=1;j<=N;++j)
{
D[i][j]=max(D[i][j-1],best+S[j]);
best=max(best,D[i-1][j]-S[j]);
}
}
nc=D[K][N];
for( int j=1;j<=N;++j)
{
D[1][j]=max(D[1][j-1],S[j]);
}
for( int i=2;i<=K;++i)
{
int best=0;
D[i][1]=S[1];
for( int j=2;j<=N;++j)
{
D[i][j]=max(D[i][j-1],best+S[j]);
best=max(best,D[i-1][j]-S[j]);
}
}
int best=0;
for( int j=1;j<N;++j)
{
best=max(best,D[K][j]-S[j]);
}
G<<max(nc,best+S[N]);
G.close();
}