Cod sursa(job #2247081)

Utilizator akumariaPatrascanu Andra-Maria akumaria Data 27 septembrie 2018 21:11:18
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>

using namespace std;

struct ruc_el
{
    int val, cost;
};

int main()
{
    freopen("rucsac.in", "r", stdin);
    freopen("rucsac.out", "w", stdout);

    int n, maxw, i, j, c_max = 0, new_max;

    scanf("%d%d", &n, &maxw);

    ruc_el elements[n+1];
    int rucsac[maxw+1];
    for(i=1; i<=maxw; ++i)
        rucsac[i] = -1;
    rucsac[0]=0;

    for(i=1; i<=n; ++i)
        scanf("%d%d", &elements[i].cost, &elements[i].val);

    for(i=1; i<=n; ++i)
    {
        new_max = c_max;
        for(j=c_max; j>=0; --j)
            if (rucsac[j] >= 0)
            {
                rucsac[j + elements[i].cost] = rucsac[j] + elements[i].val;
                if (j+ elements[i].cost > new_max)
                    new_max = j + elements[i].cost;
            }
        c_max = new_max;
    }
    printf("%d\n", rucsac[maxw]);

    return 0;
}