Digital_ghost

0/1 knapsack problem using dynamic programming

Jan 31st, 2023
1,276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.66 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3.  
  4.  
  5. int max(int a, int b) { return (a > b) ? a : b; }
  6.  
  7.  
  8. int knapSack(int W, int wt[], int val[], int n)
  9. {
  10.  
  11.    
  12.     if (n == 0 || W == 0)
  13.  
  14.         return 0;
  15.  
  16.  
  17.    
  18.  
  19.     if (wt[n - 1] > W)
  20.  
  21.         return knapSack(W, wt, val, n - 1);
  22.  
  23.  
  24.  
  25.  
  26.     else
  27.  
  28.         return max(
  29.  
  30.             val[n - 1]
  31.  
  32.                 + knapSack(W - wt[n - 1], wt, val, n - 1),
  33.  
  34.             knapSack(W, wt, val, n - 1));
  35. }
  36.  
  37.  
  38.  
  39. int main()
  40. {
  41.  
  42.     int val[] = { 60, 100, 120 };
  43.  
  44.     int wt[] = { 10, 20, 30 };
  45.  
  46.     int W = 50;
  47.  
  48.     int n = sizeof(val) / sizeof(val[0]);
  49.  
  50.     printf("%d", knapSack(W, wt, val, n));
  51.  
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment