Pagini recente » Cod sursa (job #167057) | Cod sursa (job #2902609) | Cod sursa (job #239130) | Cod sursa (job #1144052) | Cod sursa (job #81309)
Cod sursa(job #81309)
#include <stdio.h>
#define NMAX 20//10005
#define KMAX 10//05
int a[KMAX][NMAX], b[KMAX][NMAX];
int n, k;
int p[NMAX];
int s[NMAX];
void read()
{
int i;
scanf("%d%d", &n, &k);
for(i = 1; i <= n; ++i)
scanf("%d", p+i), s[i] = s[i-1] + p[i];
}
#define MAX(a, b) ((a) > (b)) ? (a) : (b)
int dinamic()
{
int i, j;
for(i = 1; i <= k; ++i)
{
for(j = 1; j <= n; ++j)
{
a[i][j] = MAX(MAX(a[i][j-1], a[i-1][j-1]), b[i-1][j-1]);
a[i][j] += p[j];
b[i][j] = MAX(a[i][j]-p[j], b[i][j-1]);
}
}
int max = -1000;
for(j = 1; j <= n; ++j)
max = MAX(max, MAX(b[k][j] + s[n] - s[j], a[k][j] + s[n] - s[j]));
return max;
}
void print(int a[KMAX][NMAX])
{
for(int i = 1; i <= k; ++i)
{
for(int j = 1; j <= n; ++j)
printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
}
int main()
{
freopen("ferma.in", "r", stdin);
freopen("ferma.out", "w", stdout);
read();
printf("%d\n", dinamic());
//print(a);
//print(b);
return 0;
}