Cod sursa(job #478740)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 20 august 2010 10:48:17
Problema Ferma Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#define Nmax 10002
#define Kmax 1002
#define INF 2147000000

int A[2][Kmax],B[2][Kmax];
int V[Nmax];
int n,k;

inline int Minim(int x,int y){ return x<y ? x:y; }
inline int Maxim(int x,int y){ return x>y ? x:y; }

int main(){
	int i,j,st,q,rez;
	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]);
	
	st=0; ++k; 
	A[0][1]=V[1]; B[0][1]=-INF; A[0][2]=B[0][2]=-INF;
	
	for(i=2;i<=n;++i){
		q=Minim(i,k);
		A[st^1][q+1]=B[st^1][q+1]=-INF;
			
		for(j=1;j<=q;++j){
			A[st^1][j]=Maxim(A[st][j],B[st^1][j-1]) + V[i];
			B[st^1][j]=Maxim(A[st][j],B[st][j]);
		}
		st^=1;
	}
	
	for(i=1;i<=n && V[i]<=0;++i) A[st][k]+=V[i];
	printf("%d\n",(rez=Maxim(Maxim(A[st][k-1],B[st][k-1]),A[st][k])) >0 ? rez:0);
	fclose(stdin); fclose(stdout);
	return 0;
}