fractional knapsack

 import java.util.*;


public class FractioinalKnapSack {
    public static void main(String[] args) {
        int weight[] = { 10, 20, 30 };
        int value[] = { 60, 100, 120 };
        int W = 50;
        double ratio[][] = new double[value.length][2];
        // 0th=>index
        // 1th => ratio
        for (int i = 0; i < value.length; i++) {
            ratio[i][0] = i;
            ratio[i][1] = value[i] / (double) weight[i];
        }
        // ASCENDING ORDER
        Arrays.sort(ratio, Comparator.comparing(o -> o[1]));
        int capacity = W;
        int finalVal = 0;
        for (int i = ratio.length - 1; i >= 0; i--) {
            int idx = (int) ratio[i][0];
            if (capacity >= weight[idx]) {
                finalVal += value[idx];
                capacity -= weight[idx];
            } else {
                // INCLUDE FRACTIONAL ITEM
                finalVal += (ratio[i][1] * capacity);
                capacity = 0;
                break;
            }
        }
        System.out.println(finalVal);
    }
}

Comments