Pagini recente » Cod sursa (job #1154006) | Cod sursa (job #2270860) | Cod sursa (job #2120008) | Cod sursa (job #2953685) | Cod sursa (job #2302421)
#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(2);
for(int i = 0; i <= 1; ++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%2][j] = max(items[(i - 1)%2].p + d[(i - 1)%2][j - items[i - 1].g], d[(i - 1)%2][j]);
else d[i%2][j] = d[(i - 1)%2][j];
}
}
int pMax = d[1][0];
for(int i = 1; i <= G; ++i) {
if(pMax < d[1][i]) pMax = d[1][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;
}