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

Popular posts from this blog

q3part b

Literal table

quicksort 1