Cod sursa(job #182535)

Utilizator tm_raduToma Radu tm_radu Data 20 aprilie 2008 23:46:13
Problema Ferma Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#define NM 10001
#define Max(a, b) ((a) > (b) ? (a) : (b))

int n, m, v[NM*10];
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 = 1; 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", a[l1][n] >= 0 ? a[l1][n] : 0);
    
    return 0;
}