Cod sursa(job #979046)

Utilizator manutrutaEmanuel Truta manutruta Data 31 iulie 2013 11:52:47
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
using namespace std;

#define MAXN 5010

ifstream f("rucsac.in");
ofstream g("rucsac.out");

struct obiect{
    int valoare, greutate;
};

int n, G;
obiect obiecte[MAXN];
int a[MAXN][MAXN];
int valmax;

int main() {
    f >> n >> G;

    for (int i = 1; i <= n; i++) {
        f >> obiecte[i].greutate >> obiecte[i].valoare;
    }

    for (int i = 1; i <= n; i++) {
        if (a[i][obiecte[i].greutate] < obiecte[i].valoare) {
            a[i][obiecte[i].greutate] = obiecte[i].valoare;
        }

        for (int j = obiecte[i].greutate + 1; j <= G; j++) {
            if (a[i - 1][j] < a[i - 1][j - obiecte[i].greutate] + obiecte[i].valoare) {
                a[i][j] = a[i - 1][j - obiecte[i].greutate] + obiecte[i].valoare;
            } else {
                a[i][j] = a[i - 1][j];
            }
        }
    }

    for (int i = 1; i <= G; i++) {
        if (valmax < a[n][i]) {
            valmax = a[n][i];
        }
    }

    g << valmax;

    return 0;
}