Cod sursa(job #2294831)

Utilizator AxellbenCretu Alexandru Axellben Data 2 decembrie 2018 20:53:38
Problema Problema rucsacului Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#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;
}