Pagini recente » Cod sursa (job #822918) | Cod sursa (job #756875) | Cod sursa (job #2010964) | Cod sursa (job #131840) | Cod sursa (job #478749)
Cod sursa(job #478749)
#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,cu_start,rez,st;
inline int Minim(int x,int y){ return x<y ? x:y; }
inline int Maxim(int x,int y){ return x>y ? x:y; }
void work(){
int i,j,q;
st=0; k+=cu_start;
A[0][1]=V[1]; B[0][1]=-INF; A[0][2]=B[0][2]=-INF;
A[0][0]=-INF;
for(i=2;i<=n;++i){
q=Minim(i,k);
A[st^1][q+1]=B[st^1][q+1]=-INF;
A[st^1][0]=-INF;
if( cu_start==1 ) B[st^1][0]=-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;
}
}
int main(){
int i;
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]);
cu_start=0;
work();
rez=Maxim(A[st][k],B[st][k]);
cu_start=1;
work();
rez=Maxim(rez,A[st][k]);
printf("%d\n",rez>0 ? rez:0);
fclose(stdin); fclose(stdout);
return 0;
}