Pagini recente » Cod sursa (job #2563654) | Cod sursa (job #1363866) | Cod sursa (job #1384116) | Cod sursa (job #752576) | Cod sursa (job #531532)
Cod sursa(job #531532)
#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;
}