Cod sursa(job #531532)

Utilizator Robert29FMI Tilica Robert Robert29 Data 9 februarie 2011 20:56:48
Problema Ferma Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
FILE*f=fopen("ferma.in","r");
FILE*g=fopen("ferma.out","w");
int max(int a,int b){
	if(a>b)
		return a;
	else
		return b;
}
int min(int a,int b){
	if(a<b)
		return a;
	else
		return b;
}
int n,k,a[10001][1002],max1,v[10001];
int b[10001][1002];
int main(){
	fscanf(f,"%d%d",&n,&k);
	for(int i=1;i<=n;++i)
		fscanf(f,"%d",&v[i]);
	//a[1][1]=v[1];
	for(int i=1;i<=n;i++){
		int x=min(i,k);
		for(int j=1;j<=x;j++){
			a[i][j]=max(a[i-1][j]+v[i],b[i-1][j-1]+v[i]);
			a[i][j]=max(a[i][j],a[i-1][j-1]+v[i]);
			b[i][j]=max(a[i-1][j],b[i-1][j]);
		}
	}
	max1=max(a[n][k],b[n][k]);
	k++;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=k;j++)
			a[i][j]=b[i][j]=0;
	a[2][1]=a[2][2]=v[1]+v[2];
	b[2][0]=0;
	b[2][1]=v[1];
	
	for(int i=3;i<=n;i++){
		int x=min(i,k);
		for(int j=1;j<=x;j++){
			a[i][j]=max(a[i-1][j]+v[i],b[i-1][j-1]+v[i]);
			a[i][j]=max(a[i][j],a[i-1][j-1]+v[i]);
			b[i][j]=max(a[i-1][j],b[i-1][j]);
		}
	}
	max1=max(max1,a[n][k]);
	fprintf(g,"%d",max1);
	
	fclose(g);
	fclose(f);
	return 0;
}