import java.util.*;
class Fruit {
public String name;
public double weight;
public double value;
Fruit(String n, double w, double v){
this.name = n;
this.weight = w;
this.value = v;
}
Fruit(Fruit fruit){
this.name = fruit.name;
this.weight = fruit.weight;
this.value = fruit.value;
}
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> packageFruit = packFruit(20,fruits);
double maxValue = 0;
System.out.println("装了如下物品:");
for (int i = 0; i < packageFruit.size(); ++i) {
maxValue += packageFruit.get(i).value;
System.out.println(packageFruit.get(i).name + " " + packageFruit.get(i).weight);
}
System.out.println("总价值:" + maxValue);
}
public static LinkedList<Fruit> packFruit(int packCapacity,Fruit[] fruits){
LinkedList<Fruit> fruitPackage = new LinkedList<>();
MyComp myComp = new MyComp();
Arrays.sort(fruits,myComp);
int leftPackCapacity = packCapacity;
for(int i = 0; i < fruits.length; i++){
if(fruits[i].weight < leftPackCapacity){
leftPackCapacity -= fruits[i].weight;
fruitPackage.add(new Fruit(fruits[i]));
}else{
fruitPackage.add(new Fruit(fruits[i].name,leftPackCapacity,leftPackCapacity*(fruits[i].value/fruits[i].weight)));
leftPackCapacity = 0;
break;
}
}
return fruitPackage;
}
public static class MyComp implements Comparator<Fruit>{
@Override
public int compare(Fruit o1,Fruit o2){
return (int)(o2.value / o2.weight - o1.value / o1.weight);
}
}
}