import java.util.*; class Solution { /** Recursive code */ public int knapsack(int W, int val[], int wt[]) { return findMaxProfit(W, val, wt, val.length); } public int findMaxProfit(int W, int val[], int wt[], int n) { if(n == 0 || W == 0) return 0; if(wt[n-1] <= W) { // put the current weight into bag int pick = val[n-1] + findMaxProfit(W-wt[n-1], val, wt, n-1); int notPick = findMaxProfit(W, val, wt, n-1); return Math.max(pick, notPick); } // when weight exceeds the max weight return findMaxProfit(W, val, wt, n-1); } /** Memoization code */ public int knapsack(int W, int val[], int wt[]) { int n = wt.length; // define a matrix as changing paramaters are n and W int[][] t = new int[n+1][W+1]; for(int i=0; i