Pagini recente » Cod sursa (job #1563397) | Cod sursa (job #1331131) | Cod sursa (job #2236396) | Cod sursa (job #1266840) | Cod sursa (job #1559569)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
//const int MAX_INDEX = 5000;
const int MAX_WEIGHT = 10000;
int N, G, D[2][MAX_WEIGHT];
struct Item {
int value;
int weight;
Item(int value, int weight) {
this->value = value;
this->weight = weight;
}
};
bool sortByWeight(const Item& lhs, const Item& rhs) {
if(lhs.weight == rhs.weight) {
return lhs.value > rhs.value;
}
return lhs.weight < rhs.weight;
}
int main() {
freopen("rucsac.in", "r", stdin);
freopen("rucsac.out", "w", stdout);
scanf("%d %d", &N, &G);
vector<Item> itemList;
int v, w;
for(int i = 1; i <= N; i++) {
scanf("%d %d", &w, &v);
Item item(v, w);
itemList.push_back(item);
}
sort(itemList.begin(), itemList.end(), sortByWeight);
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= G; j++) {
int prev = D[(i-1)%2][j];
if(itemList[i-1].weight <= j) {
int spare = j-itemList[i-1].weight;
int val = D[(i-1)%2][spare]+itemList[i-1].value;
if(val > prev) {
prev = val;
}
}
D[i%2][j] = prev;
}
}
printf("%d", D[N%2][G]);
/*
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= G; j++) {
int prev = D[i-1][j];
if(itemList[i-1].weight <= j) {
int spare = j-itemList[i-1].weight;
int val = D[i-1][spare]+itemList[i-1].value;
if(val > prev) {
prev = val;
}
}
D[i][j] = prev;
}
}
printf("%d", D[N][G]);
for(int i = 0; i <= N; i++) {
for(int j = 0; j <= G; j++) {
cout << D[i][j] << " ";
}
cout << endl;
}
*/
return 0;
}