Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. int knapsack_recursive(int weights[], int values[], int i, int weight) {
  6.     if (i == 0) return 0;
  7.     else if (weights[i] > weight) return knapsack_recursive(weights, values, i - 1, weight);
  8.     else return max(knapsack_recursive(weights, values, i - 1 , weight),
  9.                     knapsack_recursive(weights, values, i - 1, weight - weights[i]) + values[i]);
  10. }
  11.  
  12. int knapsack(int weights[], int values[], int n, int weight) {
  13.     int* e = new int[weight + 1];
  14.     int* c = new int[weight + 1];
  15.  
  16.     // fill for 1st element
  17.     for (int i = 1; i <= weight; ++i) {
  18.         e[i] = weights[1] <= i ? values[1] : 0;
  19.     }
  20.  
  21.     // fill for rest of elements
  22.     for (int i = 2; i <= n; ++i) {
  23.         for (int w = weights[i]; w <= weight; ++w) {
  24.             c[w] = max(e[w], e[w - weights[i]] + values[i]);
  25.         }
  26.  
  27.         for (int w = 0; w <= weight; ++w) {
  28.             e[w] = c[w];
  29.         }
  30.     }
  31.  
  32.     return e[weight];
  33. }
  34.  
  35. int main() {
  36.     int n, weight;
  37.     cin >> n >> weight;
  38.     int* weights = new int[n + 1];
  39.     int* values = new int[n + 1];
  40.     for (int i = 1; i <= n; ++i) {
  41.         cin >> weights[i] >> values[i];
  42.     }
  43.     cout << knapsack(weights, values, n, weight) << '\n';
  44.     delete[] weights;
  45.     delete[] values;
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement