This is java program to implement Knapsack problem using Dynamic programming.Given weights and values of n items, put these items in a knapsack of capacity W to get the maximum total value in the knapsack. Consider all subsets of items and calculate the total weight and value of all subsets. Consider the only subsets whose total weight is smaller than W. From all such subsets, pick the maximum value subset.
Here is the source code of the Java Program to Solve Knapsack Problem Using Dynamic Programming. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is the java program to implement the knapsack problem using Dynamic Programming
import java.util.Scanner;
public class Knapsack_DP
{
static int max(int a, int b)
{
return (a > b)? a : b;
}
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];
}
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of items: ");
int n = sc.nextInt();
System.out.println("Enter the items weights: ");
int []wt = new int[n];
for(int i=0; i<n; i++)
wt[i] = sc.nextInt();
System.out.println("Enter the items values: ");
int []val = new int[n];
for(int i=0; i<n; i++)
val[i] = sc.nextInt();
System.out.println("Enter the maximum capacity: ");
int W = sc.nextInt();
System.out.println("The maximum value that can be put in a knapsack of capacity W is: " + knapSack(W, wt, val, n));
sc.close();
}
}
Output:
$ javac Knapsack_DP.java $ java Knapsack_DP Enter the number of items: 5 Enter the items weights: 01 56 42 78 12 Enter the items values: 50 30 20 10 50 Enter the maximum capacity: 150 The maximum value that can be put in a knapsack of capacity W is: 150
Related posts:
Java Map With Case-Insensitive Keys
A Guide to System.exit()
Spring Boot - Tracing Micro Service Logs
Java Program to Implement CopyOnWriteArraySet API
Derived Query Methods in Spring Data JPA Repositories
Java Program to Represent Graph Using Incidence Matrix
Java Program to Use Dynamic Programming to Solve Approximate String Matching
Java Program to Represent Linear Equations in Matrix Form
Java Program to Implement Fenwick Tree
Command-Line Arguments in Java
Java Program to Implement Shunting Yard Algorithm
Spring Boot - Enabling Swagger2
Tạo chương trình Java đầu tiên sử dụng Eclipse
Java Byte Array to InputStream
Java Program to Implement Fibonacci Heap
How to Break from Java Stream forEach
Java Program to Perform integer Partition for a Specific Case
Spring 5 Testing with @EnabledIf Annotation
Circular Dependencies in Spring
Hướng dẫn Java Design Pattern – Facade
Spring Boot - Bootstrapping
Jackson Exceptions – Problems and Solutions
Converting Strings to Enums in Java
Guide To CompletableFuture
Java Program to Use Above Below Primitive to Test Whether Two Lines Intersect
String Operations with Java Streams
Queue và PriorityQueue trong Java
Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences
Xây dựng ứng dụng Client-Server với Socket trong Java
So sánh HashMap và HashSet trong Java
Java Program to Implement Efficient O(log n) Fibonacci generator
Java Program to Implement Iterative Deepening