Advertisement
rdsedmundo

knapsack

Jul 13th, 2015
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. #define MAXN 1023
  7.  
  8. int valor[MAXN];
  9. int aguenta[MAXN];
  10. int peso[MAXN];
  11. int dp[MAXN][MAXN];
  12.  
  13. int n;
  14.  
  15. int knapsack(int obj, int aguenta) {
  16.    
  17.     if (obj >= n || aguenta == 0)
  18.         return 0;
  19.    
  20.     if (dp[obj][aguenta] >= 0)
  21.         return dp[obj][aguenta];
  22.        
  23.     int nao_coloca = knapsack(obj+1, aguenta);
  24.     int coloca     = -1;
  25.    
  26.     if (peso[obj] <= aguenta)
  27.         coloca = valor[obj] + knapsack(obj+1, aguenta - peso[obj]);
  28.    
  29.     return dp[obj][aguenta] = max(nao_coloca, coloca);
  30.    
  31. }
  32.  
  33. int main() {
  34.    
  35.     int sum;
  36.     cin >> sum >> n;
  37.    
  38.     for (int i = 0; i < n; i++)
  39.         cin >> peso[i] >> valor[i];
  40.        
  41.     memset(dp, -1, sizeof(dp));
  42.     cout << knapsack(0, sum) << endl;
  43.    
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement