package com.fhj.test;
import java.util.*;
class Main {
public static void main(String[] args) {
int kg = 20;
Fruit[] fruits = {
new Fruit("苹果", 15, 300),
new Fruit("香蕉", 18,180),
new Fruit("橘子", 10, 150),
new Fruit("猕猴桃", 9, 270)
};
LinkedList<Fruit> fruitLinkedList = maxPack(kg, fruits);
double maxMoney = 0;
System.out.println("装了如下物品:");
for (Fruit fruit : fruitLinkedList) {
maxMoney += fruit.money;
System.out.println(fruit.name + " " + fruit.weight + " kg");
}
System.out.println("---------------------");
System.out.println("总价值:" + maxMoney);
}
public static LinkedList<Fruit> maxPack(int packCapacity, Fruit[] fruits){
LinkedList<Fruit> fruitLinkedList = new LinkedList<>();
Arrays.sort(fruits, new Comparator<Fruit>() {
public int compare(Fruit left, Fruit right) {
double leftUnitPrice = left.money/left.weight;
double rightUnitPrice = right.money/right.weight;
return Double.compare(rightUnitPrice, leftUnitPrice);
}
});
int leftPackCapacity = packCapacity;
for (Fruit fruit : fruits) {
if (leftPackCapacity > fruit.weight) {
leftPackCapacity -= fruit.weight;
fruitLinkedList.add(new Fruit(fruit));
} else {
double unitPrice = fruit.money / fruit.weight;
double packWeight = leftPackCapacity;
double packValue = packWeight * unitPrice;
fruitLinkedList.add(new Fruit(fruit.name, packWeight, packValue));
leftPackCapacity = 0;
break;
}
}
return fruitLinkedList;
}
}
class Fruit {
public String name;
public double weight;
public double money;
public Fruit(String name, double weight, double money) {
this.name = name;
this.weight = weight;
this.money = money;
}
public Fruit(Fruit fruit) {
this.name = fruit.name;
this.weight = fruit.weight;
this.money = fruit.money;
}
}