Pagini recente » Cod sursa (job #267134) | Cod sursa (job #327181) | Cod sursa (job #378521) | Cod sursa (job #1777706) | Cod sursa (job #2302430)
#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;
}