Cod sursa(job #424327)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 24 martie 2010 19:28:49
Problema Ferma Scor 70
Compilator cpp Status done
Runda programiada Marime 0.89 kb
#include <cstdio>

#define file_in "ferma.in"
#define file_out "ferma.out"

int n,K,p[10100];

void citire()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n, &K);
	for (int i=1;i<=n;++i)
		 scanf("%d", &p[i]);
}

inline int max(int a, int b) { return a>b?a:b; } 

inline int abs(int a) { return a>=0?a:-a; }

void solve()
{
	int i,j,k,a,c;
	int m[2][2][10100];
	c=0;

	for (i=0;i<=K+1;++i)
		m[c][0][i]=-1000000,
		m[c][1][i]=-1000000;

	m[c][1][1]=p[1];

	for (i=2;i<=n;++i)
	{
		a=c;
		c=1-a;
		m[c][0][0]=m[a][0][0];
		m[c][1][0]=-1000000;
		for (j=1;j<=K+1;++j)
		{
			m[c][0][j]=max(m[a][0][j],m[a][1][j]);
			m[c][1][j]=max(m[a][1][j],(max(m[a][0][j-1],m[a][1][j-1])))+p[i];
		}
	}

	printf("%d\n", m[c][1][K+1]);
	
	
}

int main()
{
	citire();
	solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}