Pagini recente » Cod sursa (job #1873307) | Cod sursa (job #1329503) | Cod sursa (job #1991069) | Cod sursa (job #1489142) | Cod sursa (job #478734)
Cod sursa(job #478734)
#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){
for(j=1,q=Minim(i,k);j<=q+1;++j) A[st^1][j]=B[st^1][j]=-INF;
for(j=1;j<=q;++j){
A[st^1][j]=Maxim(A[st][j]+V[i],B[st][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;
}