0% found this document useful (0 votes)
166 views

A Dynamic Programming Based Solution For 0 - 1 Knapsack Problem

This document presents a dynamic programming solution to the 0-1 Knapsack problem. It uses a 2D table K to store the maximum values for all subproblems. It fills the table in a bottom-up manner, starting with the base cases of 0 items or 0 capacity. For each subproblem, it takes the maximum of including or excluding the current item. The final solution is the maximum value for the full problem of capacity W and n items. It runs in O(nW) time complexity.

Uploaded by

Ramesh Varathan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
166 views

A Dynamic Programming Based Solution For 0 - 1 Knapsack Problem

This document presents a dynamic programming solution to the 0-1 Knapsack problem. It uses a 2D table K to store the maximum values for all subproblems. It fills the table in a bottom-up manner, starting with the base cases of 0 items or 0 capacity. For each subproblem, it takes the maximum of including or excluding the current item. The final solution is the maximum value for the full problem of capacity W and n items. It runs in O(nW) time complexity.

Uploaded by

Ramesh Varathan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 1

// A Dynamic Programming based solution for 0-1 Knapsack problem

class Knapsack
{

// A utility function that returns maximum of two integers


static int max(int a, int b) { return (a > b)? a : b; }

// Returns the maximum value that can be put in a knapsack of capacity W


static int knapSack(int W, int wt[], int val[], int n)
{
int i, w;
int K[][] = new int[n+1][W+1];

// Build table K[][] in bottom up manner


for (i = 0; i <= n; i++)
{
for (w = 0; w <= W; w++)
{
if (i==0 || w==0)
K[i][w] = 0;
else if (wt[i-1] <= w)
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]);
else
K[i][w] = K[i-1][w];
}
}

return K[n][W];
}

// Driver program to test above function


public static void main(String args[])
{
int val[] = new int[]{60, 100, 120};
int wt[] = new int[]{10, 20, 30};
int W = 50;
int n = val.length;
System.out.println(knapSack(W, wt, val, n));
}
}

Output:
220
Time Complexity: O(nW) where n is the number of items and W is the capacity of
knapsack.

You might also like