Cod sursa(job #331050)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 12 iulie 2009 14:49:22
Problema Ferma Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#define NMAX 10001
#define KMAX 1024
#define Inf 0x3f3f3f3f
int N,K,v[NMAX],a[2][KMAX],b[2][KMAX];
int max(int a,int b) {return a>b?a:b;}
int main()
{
    int i,j,now=1,prev=0,sol;
    freopen("ferma.in","r",stdin);
    freopen("ferma.out","w",stdout);
    scanf("%d %d",&N,&K);
    for (i=1;i<=N;++i) scanf("%d",v+i);

    for (i=0;i<=K+1;++i) a[now][i]=b[now][i]=-Inf;
    a[now][1]=v[1];
    b[now][0]=0;
    for (i=2;i<=N;++i)
    {
        now=i&1;prev=1-now;
        for (j=1;j<=K+1 && j<=i;++j)
        {
            a[now][j]=v[i]+max(max(a[prev][j],a[prev][j-1]),b[prev][j-1]);
            b[now][j]=max(b[prev][j],a[prev][j]);
        }
    }
    
    printf("%d",max(max(a[now][K],b[now][K]),max(a[now][K+1],0)));
    
    return 0;
}