From 455876723ba30fcec77898ef2cb918494ada1b88 Mon Sep 17 00:00:00 2001 From: Deepak Date: Tue, 3 Oct 2017 09:38:34 +0530 Subject: [PATCH] add 0-1 knapsack Very frequently asked DP problem --- Dynamic Programming/Knapsack.java | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Dynamic Programming/Knapsack.java diff --git a/Dynamic Programming/Knapsack.java b/Dynamic Programming/Knapsack.java new file mode 100644 index 000000000000..ea84167b9bbe --- /dev/null +++ b/Dynamic Programming/Knapsack.java @@ -0,0 +1,38 @@ +// A Dynamic Programming based solution for 0-1 Knapsack problem + +public class Knapsack +{ + + private static int knapSack(int W, int wt[], int val[], int n) + { + int i, w; + int rv[][] = new int[n+1][W+1]; //rv means return value + + // Build table rv[][] in bottom up manner + for (i = 0; i <= n; i++) + { + for (w = 0; w <= W; w++) + { + if (i==0 || w==0) + rv[i][w] = 0; + else if (wt[i-1] <= w) + rv[i][w] = Math.max(val[i-1] + rv[i-1][w-wt[i-1]], rv[i-1][w]); + else + rv[i][w] = rv[i-1][w]; + } + } + + return rv[n][W]; + } + + + // Driver program to test above function + public static void main(String args[]) + { + int val[] = new int[]{50, 100, 130}; + int wt[] = new int[]{10, 20, 40}; + int W = 50; + int n = val.length; + System.out.println(knapSack(W, wt, val, n)); + } +}