import java.util.Arrays;
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
Fruit[] fruits = {
new Fruit("苹果",15,300),
new Fruit("香蕉",18,180),
new Fruit("橘子",10,150),
new Fruit("猕猴桃",9,270)
};
LinkedList<Fruit> f = packFruit(20,fruits);
double maxValue = 0;
System.out.println("装了以下水果:");
for(Fruit fruit : f){
maxValue += fruit.totalValue;
System.out.println(fruit.name + " " + fruit.totalWeight);
}
System.out.println("总价值:"+maxValue);
}
public static LinkedList packFruit(int packCapacity, Fruit[] fruits){
LinkedList<Fruit> f = new LinkedList<Fruit>();
Arrays.sort(fruits,(a,b)->(int)(b.totalValue/b.totalWeight - a.totalValue/a.totalWeight));
for(int i = 0; i < fruits.length; i++){
if(packCapacity > fruits[i].totalWeight){
packCapacity -= fruits[i].totalWeight;
f.add(fruits[i]);
System.out.println(f.get(i).name);
}else{
double a = fruits[i].totalValue/fruits[i].totalWeight;
double b = a*packCapacity;
f.add(new Fruit(fruits[i].name,packCapacity,b));
packCapacity = 0;
break;
}
}
return f;
}
}
class Fruit{
public String name;
public double totalWeight;
public double totalValue;
Fruit(String name, double totalWeight, double totalValue){
this.name = name;
this.totalValue = totalValue;
this.totalWeight = totalWeight;
}
}