Pagini recente » Cod sursa (job #1187213) | Cod sursa (job #1904998) | Cod sursa (job #2073611) | Cod sursa (job #2878343) | Cod sursa (job #3355514)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int N, G;
fin >> N >> G;
// varianta fara matrice bidimensionala
// dp[w] = profitul maxim care poate fi obtinut folosind o
// capacitate de exact sau cel mult w
vector<int> dp(G + 1, 0); // de la 0 la maximul G
// iau fiecare obiect
for (int i = 0; i < N; i++) {
int W, P;
fin >> W >> P;
// parcurg invers greutatile, de la G la W, cea curenta adica
// pt a folosi fiecare obiect o singura data
for (int w = G; w >= W; w--) {
if (dp[w] < dp[w - W] + P) // daca iau obiectul curent sau nu
dp[w] = dp[w - W] + P;
}
}
fout << dp[G] << "\n";
return 0;
}