Cod sursa(job #474799)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 5 august 2010 00:58:49
Problema Ferma Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <string.h>

int n, k, oua[10005];
int v[1005][2], v1[1005][2];

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

int rez (int tip)
{
	k += tip;
	
	int i, j;
	for (i = 0; i <= k; i ++)
		v[i][0] = v[i][1] = -1000000000;
	
	v[tip][tip] = oua[tip];
	
	for (i = tip + 1; i <= n; i ++)
	{
		v1[0][0] = v[0][0];
		v1[0][1] = -1000000000;
		
		for (j = 1; j <= k; j ++)
		{
			v1[j][0] = max (v[j][0], v[j][1]);
			v1[j][1] = max (v1[j - 1][0], v[j][1]) + oua[i];
		}
		
		memcpy (v, v1, sizeof (v1));
	}
	
	return max (v[k][tip], v[k][1]);
}

int main ()
{
	freopen ("ferma.in", "r", stdin);
	freopen ("ferma.out", "w", stdout);
	
	scanf ("%d %d", &n, &k);
	
	int i, sol;
	for (i = 1; i <= n; i ++)
		scanf ("%d", &oua[i]);
	
	sol = max (rez (0), 0);
	printf ("%d\n", max (sol, rez (1)));
	
	return 0;
}