Pagini recente » Cod sursa (job #2734746) | Cod sursa (job #1770413) | Cod sursa (job #896736) | Cod sursa (job #1244719) | Cod sursa (job #3160459)
#include <fstream>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
// 1 ≤ N ≤ 5000
// 1 ≤ G ≤ 10000
// 0 ≤ Wi, Pi ≤ 10000
const int MAX_N = 5001;
const int MAX_G = 10000;
struct t_object {
int greutate;
int profit;
};
int memo[MAX_N][MAX_G];
int dp_profit(int idx, int capacitate, t_object objs[]) {
if (idx == 0) {
return 0;
}
if (capacitate == 0) {
return 0;
}
if (memo[idx][capacitate] != 0) {
return memo[idx][capacitate];
}
if (objs[idx].greutate > capacitate) {
memo[idx][capacitate] = dp_profit(idx - 1, capacitate, objs);
return memo[idx][capacitate];
}
// cazul 1 - nu luăm obiectul
int profit1 = dp_profit(idx - 1, capacitate, objs);
// cazul 2 - luăm obiectul
int new_capacitate = capacitate - objs[idx].greutate;
int profit2 = objs[idx].profit + dp_profit(idx - 1, new_capacitate, objs);
memo[idx][capacitate] = max(profit1, profit2);
return memo[idx][capacitate];
}
int main() {
int nr_elem;
int max_gr;
t_object objs[MAX_N];
fin >> nr_elem;
fin >> max_gr;
for (int i = 1; i <= nr_elem; i++) {
int greutate;
int profit;
fin >> greutate;
fin >> profit;
t_object obj = {greutate, profit};
objs[i] = obj;
}
fout << dp_profit(nr_elem, max_gr, objs);
}