Pagini recente » Cod sursa (job #1554448) | Istoria paginii runda/avram_iancu_10/clasament | Istoria paginii runda/am_piramide/clasament | Cod sursa (job #1774056) | Cod sursa (job #478740)
Cod sursa(job #478740)
#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){
q=Minim(i,k);
A[st^1][q+1]=B[st^1][q+1]=-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;
}
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;
}