fork(1) download
  1. //Top down approach
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. #define MAX_N 2010
  6.  
  7. int n, val[MAX_N], wt[MAX_N], memo[MAX_N][MAX_N];
  8.  
  9.  
  10. int knapSack(int n, int w)
  11. {
  12. if (memo[n][w] != -1) return memo[n][w];
  13. // Base Case
  14. if (n == 0 || w == 0) return 0;
  15.  
  16.  
  17. else if (wt[n-1] > w) return memo[n][w] = knapSack(n-1,w);
  18.  
  19. else return memo[n][w] = max(val[n-1] + knapSack(n-1, w-wt[n-1]), knapSack(n-1, w));
  20. }
  21.  
  22.  
  23.  
  24.  
  25. int main()
  26. {
  27. int n, mw;
  28. memset(memo, -1, sizeof memo);
  29.  
  30. cin>>mw>>n;
  31.  
  32. for(int i=0;i<n;i++) cin>>wt[i]>>val[i];
  33.  
  34. cout<<knapSack(n,mw)<<endl;
  35.  
  36. return 0;
  37. }
  38.  
  39.  
Runtime error #stdin #stdout 3.81s 18536KB
stdin
Standard input is empty
stdout
Standard output is empty