fractional knapsack

PHOTO EMBED

Sat Dec 24 2022 12:39:05 GMT+0000 (Coordinated Universal Time)

Saved by @Beluga #java

 public static double maxValue(int[] weight, int[] value, int capacity){
        double[][] ratio=new double[weight.length][2];
        for(int i=0;i< weight.length;i++){
            ratio[i][0]=i;
            ratio[i][1]=value[i]/(double)weight[i];
        }
        Arrays.sort(ratio,Comparator.comparingDouble(o->o[1]));
        double val=0;
        for(int i= weight.length-1;i>=0;i--){
            int idx=(int)ratio[i][0];
            if(capacity>=weight[idx]){
                val+=value[idx];
                capacity-=weight[idx];
            }
            else{
                val+=capacity*ratio[i][1];
                capacity=0;
                break;
            }
        }
        return val;
    }
    public static void main(String[] args){
       int[] weight={10,20,30};
       int[] value={60,100,120};
       int capacity=50;
        System.out.println(maxValue(weight,value,capacity));
    }
content_copyCOPY