Subscribe Us

Responsive Advertisement

Advertisement

0 1 Knapsack dp

 #include <bits/stdc++.h> 

int func(vector<int>&we,vector<int>&val,int n,int mxw,vector<vector<int>>&dp)
{
    if(n==0)
    {
        if(we[n]<=mxw)
        return val[n];
        return 0;
    }
    if(dp[n][mxw]!=-1)return dp[n][mxw];
    int take,nottake;
    take=0;
    nottake=func(we,val,n-1,mxw,dp);
    if(mxw-we[n]>=0)
    {
        take=val[n]+func(we,val,n-1,mxw-we[n],dp);
    }
    return dp[n][mxw]=max(take,nottake);
}
int knapsack(vector<int> weight, vector<int> value, int n, int maxWeight) 
{
    
     vector<vector<int>>dp(n,vector<int>(maxWeight+1,-1));
     return func( weight, value, n-1, maxWeight,dp);

    
}

Post a Comment

0 Comments