Cod sursa(job #182552)

Utilizator tm_raduToma Radu tm_radu Data 21 aprilie 2008 00:19:53
Problema Ferma Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#define NM 10001
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define INF 2000000000

int n, m, v[NM];
int a[2][NM], b[2][NM];
int i, j, k, l1, l2;

int main()
{
    freopen("ferma.in", "r", stdin);
    freopen("ferma.out", "w", stdout);
    scanf("%d %d", &n, &m);
	for ( i = 1; i <= n; i++ ) scanf("%d", &v[i]);

	a[0][0] = b[0][0] = 0;
	    
    l1 = 0, l2 = 1;
	for ( k = 1; k <= m+1; k++, l1 = !l1, l2 = !l2 )
	{
		for ( i = 0; i < k; i++ )
			a[l2][i] = b[l2][i] = -INF;
		for ( i = k; i <= n; i++ )
			b[l2][i] = Max(b[l2][i-1], a[l2][i-1]),
			a[l2][i] = Max(a[l2][i-1], Max(b[l1][i-1], a[l1][i-1])) + v[i];
	}
    printf("%d\n", Max(Max(a[l2][n], b[l2][n]), Max(a[l1][n], 0)));
    
    return 0;
}