Pagini recente » Cod sursa (job #3040881) | Cod sursa (job #1189126) | Cod sursa (job #951906) | Cod sursa (job #549433) | Cod sursa (job #2294831)
#include <fstream>
#include <iostream>
#include <map>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
#define MAXN 5000
#define MAXG 10000
int W[MAXN], P[MAXN];
// int D[MAXN][MAXG];
map<int, map<int, int>> D;
int knapsack(int N, int G) {
if (D[N][G]) {
return D[N][G];
}
if (N == 0 || G == 0) {
D[N][G] = 0;
} else if (G < W[N]) {
D[N][G] = knapsack(N - 1, G);
} else {
int temp1 = knapsack(N - 1, G);
int temp2 = P[N] + knapsack(N - 1, G - W[N]);
D[N][G] = max(temp1, temp2);
}
return D[N][G];
}
int main() {
int N, G;
fin >> N >> G;
for (int i = 1; i <= N; i++) {
fin >> W[i] >> P[i];
}
fout << knapsack(N, G);
return 0;
}