Pagini recente » Cod sursa (job #537650) | Cod sursa (job #2724334) | Cod sursa (job #2953304) | Cod sursa (job #109490) | Cod sursa (job #490221)
Cod sursa(job #490221)
#include<stdio.h>
#include<string.h>
#define maxim(a,b) (a>b ? a : b)
int n,k,p[10005];
int d[2][10005];
int v[10005],s[10005];
void calc(int tip)
{
int i,j;
for(i=1;i<=k;i++)
{
for(j=1;j<=n;j++)
p[j]=maxim(p[j-1],d[(i-1)&1][j]-s[j]);
if(tip && i==1)
j=2;
else
j=1;
for(;j<=n;j++)
d[i&1][j]=maxim(d[i&1][j-1],p[j-1]+s[j]);
}
}
int main ()
{
int i,sol1,sol2;
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]);
s[i]=s[i-1]+v[i];
}
calc(0);
sol1=d[k&1][n];
memset(d,0,sizeof(d));
d[1][1]=v[1];
calc(1);
sol2=d[k&1][n];
for(i=n-1;i>=1;i--)
sol2=maxim(sol2,d[k&1][i]+s[n]-s[i]);
printf("%d\n", maxim(0,maxim(sol1,sol2)));
return 0;
}