Cod sursa(job #2302430)

Utilizator mariusgrafuMarius Grafu mariusgrafu Data 14 decembrie 2018 17:14:27
Problema Problema rucsacului Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

struct item {
    int p, g;

    item (int _p = 0, int _g = 0) {
        p = _p;
        g = _g;
    }
};

int rucsac (vector<item> items, int G) {
    vector< vector<int> > d;
    int n = items.size();

    d.resize(n + 1);

    for(int i = 0; i <= n; ++i) {
        for(int j = 0; j <= G; ++j) {
            d[i].push_back(INT_MIN);
        }
    }

    d[0][0] = 0;

    for(int i = 1; i <= n; ++i) {
        for(int j = 0; j <= G; ++j) {
            if(j - items[i - 1].g >= 0)
                d[i][j] = max(items[i - 1].p + d[i - 1][j - items[i - 1].g], d[i - 1][j]);
            else d[i][j] = d[i - 1][j];
        }
    }

    int pMax = d[n][0];

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

    return pMax;

}

int main()
{
    ifstream in("rucsac.in");
    ofstream out("rucsac.out");

    int N, G;

    in >> N >> G;

    vector<item> items;

    for(int i = 0; i < N; ++i) {
        int p, g;
        in >> g >> p;
        items.push_back(item(p, g));
    }

    out << rucsac(items, G);

    in.close(); out.close();
    return 0;
}