Cod sursa(job #1464609)

Utilizator akaprosAna Kapros akapros Data 23 iulie 2015 23:50:39
Problema Ferma Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#define inf -100002
#define Nmax 10002
#define Kmax 1002
using namespace std;
int n, i, j, k, v[Nmax], sum;
int a[2][Kmax], b[2][Kmax];
int main()
{
    int sol = 0, sum, p, q, j;
    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]);
    ++ k;
    for (j = 1; j <= k; ++ j)
        a[0][j] = inf,
        b[0][j] = inf;
    for (i = 1; i <= n; ++ i)
        for (j = 1; j <= min(i, k); ++ j)
        {
            a[i % 2][j] = max(max(a[(i - 1) % 2][j], a[(i - 1) % 2][j - 1]), b[(i - 1) % 2][j - 1]) + v[i];
            b[i % 2][j] = max(a[(i - 1) % 2][j], b[(i - 1) % 2][j]);
            if (a[i % 2][j] < a[i % 2][j - 1])
                a[i % 2][j] = a[i % 2][j - 1];
            if (b[i % 2][j] < b[i % 2][j - 1])
                b[i % 2][j] = b[i % 2][j - 1];
            if (i == n)
            sol = max(a[n % 2][j], sol);
        }
    printf("%d", sol);
    return 0;
}