int f(int ind,int wt, int w[],int v[],vector<vector<int>>& dp) { if(ind==0) { return (w[0]<=wt)?v[0]:0; } int pick,nonpick; if(dp[ind][wt]!=-1) return dp[ind][wt]; nonpick = f(ind-1,wt,w,v,dp); pick = INT_MIN; if(wt>=w[ind]) pick = v[ind] + f(ind-1,wt-w[ind],w,v,dp); return dp[ind][wt] = max(pick,nonpick); } int knapSack(int W, int wt[], int val[], int n) { // Your code here vector<vector<int>> dp(n + 1, vector<int>(W + 1, -1)); return f(n-1,W,wt,val,dp); }