Cod sursa(job #1467310)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 3 august 2015 11:15:25
Problema Energii Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
#define max(i, j) (i > j ? i : j)
#define min(i, j) (i < j ? i : j)

using namespace std;

int i, j, g, w, eg[1001], cg[1001];
int c[1001][5001], maxim, s;

int main()
{
    FILE *in = fopen("energii.in", "r");
    FILE *out = fopen("energii.out", "w");

    fscanf(in, "%d\n%d", &g, &w);

    for (i = 1; i <= g; i++)
    {
        fscanf(in, "%d %d\n", &eg[i], &cg[i]);
        s += cg[i];
    }

    for (i = 1; i <= g; i++)
        for (j = 1; j <= s; j++)
        {
            c[i][j] = c[i-1][j];
            if (cg[i] <= j) c[i][j] = max(c[i-1][j], c[i-1][j-cg[i]] + eg[i]);
            maxim = max(maxim, c[i][j]);
        }

    s = min(s, 5000);
    for (i = s; c[g][i-1] >= w; i--);
    fprintf(out, "%d", ((c[g][i] >= w) ? i : -1));
    return 0;
}