Pagini recente » Cod sursa (job #2596635) | Cod sursa (job #278690) | Cod sursa (job #2982136) | Cod sursa (job #83461) | Cod sursa (job #531542)
Cod sursa(job #531542)
#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,a1[1002],max1,v[10001];
int b1[1002],a2[1002],b2[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<=k;j++){
a2[j]=max(a1[j]+v[i],b1[j-1]+v[i]);
a2[j]=max(a2[j],a1[j-1]+v[i]);
b2[j]=max(a1[j],b1[j]);
}
for(int j=1;j<=x;j++){
a1[j]=a2[j];
b1[j]=b2[j];
}
}
max1=max(a1[k],b1[k]);
k++;
for(int j=1;j<k;j++)
a1[j]=b1[j]=b2[j]=a2[j]=0;
a1[1]=a1[2]=v[1]+v[2];
b1[0]=0;
b1[1]=v[1];
for(int i=3;i<=n;i++){
int x=min(i,k);
for(int j=1;j<=k;j++){
a2[j]=max(a1[j]+v[i],b1[j-1]+v[i]);
a2[j]=max(a2[j],a1[j-1]+v[i]);
b2[j]=max(a1[j],b1[j]);
}
for(int j=1;j<=x;j++){
a1[j]=a2[j];
b1[j]=b2[j];
}
}
max1=max(max1,a1[k]);
fprintf(g,"%d",max1);
fclose(g);
fclose(f);
return 0;
}