Cod sursa(job #718653)

Utilizator Sm3USmeu Rares Sm3U Data 20 martie 2012 22:47:43
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#define gMax 10001
#define nMax 5001
#define max(a, b) ((a > b)? a : b )

using namespace std;

int n;
int g;
int greutate[nMax];
int cost[nMax];
int a[gMax];
int b[gMax];

void citire()
{
    scanf ("%d %d", &n, &g);
    for (int i = 1; i <= n; ++ i){
        scanf ("%d %d", &greutate[i], &cost[i]);
    }
}

void rez()
{
    for (int i = 1; i <= n; ++ i){
        for (int j = 1; j <= g; ++ j){
            a[j] = max (a[j - 1], b[j]);
            //a[i][j] = max (a[i - 1][j], a[i][j - 1]);
            if (j >= greutate[i]){
                //a[i][j] = max (a[i][j], a[i - greutate[j]][j - 1] + cost[j]);
                a[j] = max (a[j], b[j - greutate[i]] + cost[i]);
            }
        }
        for (int j = 1; j <= g; ++ j){
            b[j] = a[j];
        }
    }
    printf ("%d\n", a[g]);
}

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

    return 0;
}