Pagini recente » Cod sursa (job #247005) | Cod sursa (job #88852) | Cod sursa (job #698530) | Monitorul de evaluare | Cod sursa (job #182548)
Cod sursa(job #182548)
#include <stdio.h>
#define NM 10001
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define INF 2000000000
int n, m, v[NM];
int a[2][NM], b[2][NM];
int i, j, k, l1, l2;
int main()
{
freopen("ferma.in", "r", stdin);
freopen("ferma.out", "w", stdout);
scanf("%d %d", &n, &m);
for ( i = 1; i <= n; i++ ) scanf("%d", &v[i]);
a[0][0] = b[0][0] = 0;
l1 = 0, l2 = 1;
for ( k = 1; k <= m+1; k++, l1 = !l1, l2 = !l2 )
{
for ( i = 1; i < k; i++ )
a[l2][i] = b[l2][i] = -INF;
for ( i = k; i <= n; i++ )
b[l2][i] = Max(b[l2][i-1], a[l2][i-1]),
a[l2][i] = Max(a[l2][i-1], Max(b[l1][i-1], a[l1][i-1])) + v[i];
}
printf("%d\n", Max(b[l2][n], Max(a[l1][n], 0)));
return 0;
}