Pagini recente » Cod sursa (job #893679) | Cod sursa (job #2091) | Cod sursa (job #385750) | Cod sursa (job #361306) | Cod sursa (job #424749)
Cod sursa(job #424749)
#include <cstdio>
#define file_in "ferma.in"
#define file_out "ferma.out"
int n,K,p[10100];
void citire()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n, &K);
for (int i=1;i<=n;++i)
scanf("%d", &p[i]);
}
inline int max(int a, int b) { return a>b?a:b; }
inline int abs(int a) { return a>=0?a:-a; }
void solve()
{
int i,j,k,a,c;
int m[2][2][10100];
c=0;
for (i=0;i<=K+1;++i)
m[c][0][i]=-1000000,
m[c][1][i]=-1000000;
m[c][1][1]=p[1];
for (i=2;i<=n;++i)
{
a=c;
c=1-a;
m[c][0][0]=m[a][0][0];
m[c][1][0]=-1000000;
for (j=1;j<=K+1;++j)
{
m[c][0][j]=max(m[a][0][j],m[a][1][j]);
m[c][1][j]=max(m[a][1][j],(max(m[a][0][j-1],m[a][1][j-1])))+p[i];
}
}
int max1,max2;
max1=m[c][1][K+1];
c=0;
for (i=1;i<=K;++i)
m[c][0][i]=-1000000,
m[c][1][i]=-1000000;
for (i=1;i<=n;++i)
{
a=c;
c=1-a;
m[c][0][0]=m[a][0][0];
m[c][1][0]=-1000000;
for (j=1;j<=K;++j)
{
m[c][0][j]=max(m[a][0][j],m[a][1][j]);
m[c][1][j]=max(m[a][1][j],(max(m[a][0][j-1],m[a][1][j-1])))+p[i];
}
}
max2=max(m[c][1][K],m[c][0][K]);
printf("%d\n", max(max1,max2));
}
int main()
{
citire();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}