Pagini recente » Cod sursa (job #1156708) | Cod sursa (job #2271493) | Cod sursa (job #1031523) | Cod sursa (job #674122) | Cod sursa (job #73358)
Cod sursa(job #73358)
#include<stdio.h>
#define Nm 10000
#define max(a,b) ((a)>(b)?(a):(b))
int A[Nm],n,k,sol;
void read()
{
int i;
freopen("ferma.in","r",stdin);
scanf("%d%d",&n,&k);
for(i=0;i<n;++i)
scanf("%d",A+i);
}
void solve()
{
int M[2][Nm],Mb[2][Nm],Me[2][Nm],Mbe[2][Nm],i,j,c,p;
M[0][0]=Mb[0][0]=Me[0][0]=Mbe[0][0]=A[0];
for(i=1;i<n;++i)
{
Me[0][i]=A[i]+max(0,Me[0][i-1]);
M[0][i]=max(M[0][i-1],Me[0][i]);
Mbe[0][i]=A[i]+Mbe[0][i-1];
Mb[0][i]=max(Mb[0][i-1],Mbe[0][i]);
}
c=1; p=0;
for(j=1;j<k;++j)
{
M[c][j]=Me[c][j]=Mb[c][j]=Mbe[c][j]=A[j]+M[p][j-1];
for(i=j+1;i<n;++i)
{
Me[c][i]=A[i]+max(M[p][i-1],Me[c][i-1]);
M[c][i]=max(M[c][i-1],Me[c][i]);
Mbe[c][i]=A[i]+max(Mb[p][i-1],Mbe[c][i-1]);
Mb[c][i]=max(Mb[c][i-1],Mbe[c][i]);
}
c^=1; p^=1;
}
j=0;
for(i=n-1;i>=k;--i)
{
j+=A[i];
sol=max(sol,j+Mb[p][i-1]);
}
sol=max(sol,M[p][n-1]);
}
void write()
{
freopen("ferma.out","w",stdout);
printf("%d\n",sol);
}
int main()
{
read();
solve();
write();
return 0;
}