Cod sursa(job #758175)

Utilizator danalex97Dan H Alexandru danalex97 Data 14 iunie 2012 19:09:00
Problema Ferma Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#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();
}