Cod sursa(job #909949)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 10 martie 2013 18:08:49
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>

#define NMAX 5001
#define GMAX 10001
#define INF (1 << 30)

using namespace std;

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

void read()
{
    freopen("rucsac.in", "r", stdin);

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

int solve()
{
    int maxim = -INF;

    for(int i = 1; i <= n; ++ i)
        for(int j = g - w[i]; j >= 0; -- j)
            if(s[j + w[i]] < s[j] + p[i])
            {
                s[j + w[i]] = s[j] + p[i];

                if(s[j + w[i]] > maxim)
                    maxim = s[j + w[i]];
            }

    return maxim;
}

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

    read();
    printf("%d\n", solve());

    return 0;
}