Cod sursa(job #800476)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 21 octombrie 2012 18:34:05
Problema Problema rucsacului Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
#include <algorithm>

#define NMAX 10001
#define GMAX 5001

using namespace std;

FILE *inFile = fopen ("rucsac.in", "r");
FILE *outFile = fopen ("rucsac.out", "w");

int n;
int g;
int w[NMAX];
int p[NMAX];
int sol[GMAX];

void read()
{
    fscanf (inFile, "%d %d\n", &n, &g);

    for (int i = 1; i <= n; ++ i)
        fscanf (inFile, "%d %d\n", &w[i], &p[i]);
}

int solve()
{
    int res = 0;

    for (int i = 1; i <= n; ++ i)
        for (int j = g - w[i]; j >= 0; -- j)
            if (sol[j + w[i]] < sol[j] + p[i])
            {
                sol[j + w[i]] = sol[j] + p[i];
                res = max (res, sol[j + w[i]]);
            }

    return res;
}

int main()
{
    read();
    fprintf (outFile, "%d\n", solve());

    return 0;
}