Pagini recente » Cod sursa (job #2563769) | Cod sursa (job #2374219) | Cod sursa (job #2372802) | Cod sursa (job #2098599) | Cod sursa (job #2294820)
#include <fstream>
#include <iostream>
#include <map>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
#define MAXN 500
#define MAXG 1000
int W[MAXN], P[MAXN];
int D[MAXN][MAXG];
int knapsack(int N, int G) {
if (D[N][G]) {
return D[N][G];
}
if (N < 0 || G == 0) {
return 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 = 0; i < N; i++) {
fin >> W[i] >> P[i];
}
fout << knapsack(N - 1, G);
return 0;
}