knasack
knapsack
import java.util.ArrayList;
import java.util.List;
public class KnapsackDP {
public static int knapsack(int[] values, int[] weights, int capacity) {
int n = values.length;
int[][] dp = new int[n + 1][capacity + 1];
// Build dp table
for (int i = 1; i <= n; i++) {
for (int w = 1; w <= capacity; w++) {
if (weights[i - 1] <= w) {
dp[i][w] = Math.max(dp[i - 1][w], dp[i - 1][w - weights[i - 1]] + values[i - 1]);
} else {
dp[i][w] = dp[i - 1][w];
}
}
}
List<Integer> selectedItems = new ArrayList<>();
int w = capacity;
for (int i = n; i > 0; i--) {
if (dp[i][w] != dp[i - 1][w]) {
selectedItems.add(i - 1); // Add item index
w -= weights[i - 1]; // Reduce remaining capacity
}
}
System.out.println("Selected item indices: " + selectedItems);
return dp[n][capacity]; // The maximum value is in dp[n][capacity]
}
public static void main(String[] args) {
int[] values = {10,10,12,18};
int[] weights = {2,4,6,9};
int capacity = 4;
int maxValue = knapsack(values, weights, capacity);
System.out.println("Maximum Value: " + maxValue);
}
}
Comments
Post a Comment