Sajib_Ahmed

0/1 knapsack dynamic programming

Jun 27th, 2019
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int knapsack(int W,int n,int val[],int wt[]);
  4. int main()
  5. {
  6.     int W,n,i;
  7.     cin>>W>>n;
  8.     int val[n+1],wt[n+1];
  9.     for(i=1;i<=n;i++)
  10.     {
  11.         cin>>val[i];
  12.     }
  13.     for(i=1;i<=n;i++)
  14.     {
  15.         cin>>wt[i];
  16.     }
  17.  
  18.     cout<<knapsack(W,n,val,wt);
  19. }
  20. int knapsack(int W,int n,int val[],int wt[])
  21. {
  22.     int i,w;
  23.     int knap[n+1][W+1];
  24.     for(w=0;w<=W;w++)
  25.     {
  26.         knap[0][w]=0;
  27.     }
  28.     for(i=0;i<=n;i++)
  29.     {
  30.         knap[i][0]=0;
  31.     }
  32.     for(i=1;i<=n;i++)
  33.     {
  34.         for(w=1;w<=W;w++)
  35.         {
  36.             if(wt[i]<=w)
  37.             {
  38.                 knap[i][w]=max(val[i]+knap[i-1][w-wt[i]],knap[i-1][w]);
  39.             }
  40.             else
  41.             {
  42.                 knap[i][w]=knap[i-1][w];
  43.             }
  44.         }
  45.     }
  46.     return knap[n][W];
  47. }
Advertisement
Add Comment
Please, Sign In to add comment