0% found this document useful (0 votes)
157 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
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
157 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
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