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:
Convert a Map to an Array, List or Set in Java
Send an email using the SMTP protocol
Mệnh đề Switch-case trong java
Java Program to Implement Insertion Sort
Intro to Inversion of Control and Dependency Injection with Spring
New Features in Java 14
Using Java Assertions
Spring Boot - File Handling
Java Program to Implement Vector API
Java Program to Find Number of Spanning Trees in a Complete Bipartite Graph
Xây dựng ứng dụng Client-Server với Socket trong Java
A Guide to EnumMap
Java Program to Find Inverse of a Matrix
Java Program to find the maximum subarray sum using Binary Search approach
Check if a String is a Palindrome in Java
Java Program to implement Associate Array
Java Program to Implement Trie
Command-Line Arguments in Java
Spring Data MongoDB Transactions
Java Program to Implement Repeated Squaring Algorithm
Annotation trong Java 8
Java Program to Apply Above-Below-on Test to Find the Position of a Point with respect to a Line
How To Serialize and Deserialize Enums with Jackson
Java Program to Implement Ford–Fulkerson Algorithm
Intro to Spring Boot Starters
Hướng dẫn sử dụng Java Reflection
Java Program to Find Strongly Connected Components in Graphs
Java Program to Check whether Undirected Graph is Connected using BFS
Lập trình đa luồng với CompletableFuture trong Java 8
Introduction to Spring MVC HandlerInterceptor
Kết hợp Java Reflection và Java Annotations
Java Program to Find Number of Articulation points in a Graph