import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
public class GreedyTemplate {
static class Item {
public String name;
public double totalWeight;
public double totalValue;
Item(String itemName, double weight, double value) {
this.name = itemName;
this.totalWeight = weight;
this.totalValue = value;
}
Item(Item item) {
this.name = item.name;
this.totalWeight = item.totalWeight;
this.totalValue = item.totalValue;
}
}
public static LinkedList<Item> packFruit(int packCapacity, Item[] items){
LinkedList<Item> fruits = new LinkedList<Item>();
Arrays.sort(items,new Comparator<Item>() {
@Override
public int compare(Item left, Item right) {
double leftUniPrice =left.totalValue/left.totalWeight;
double rightUniPrice= right.totalValue/right.totalWeight;
if(leftUniPrice>rightUniPrice){
return -1;
}else if(leftUniPrice==rightUniPrice){
return 0;
}else{
return 1;
}
}
});
int leftPackCapacity=packCapacity;
for (int i = 0; i < items.length; ++i) {
if(leftPackCapacity>=items[i].totalWeight){
leftPackCapacity-=items[i].totalWeight;
fruits.add(new Item(items[i]));
}else{
double uniPrice = items[i].totalValue/items[i].totalWeight;
double packWeight =leftPackCapacity;
double packValue= packWeight *uniPrice;
fruits.add(new Item(items[i].name,packWeight,packValue));
leftPackCapacity = 0;
break;
}
}
return fruits;
}
public static void main(String[] args) {
Item[] items = {
new Item("Apple", 15, 300),
new Item("Banana", 18, 180),
new Item("Orange", 10, 150),
new Item("Kiwi ", 9, 270)
};
LinkedList<Item> fruits = packFruit(20, items);
double maxValue = 0;
System.out.println("装了如下物品:");
for (int i = 0; i < fruits.size(); ++i) {
maxValue += fruits.get(i).totalValue;
System.out.println(fruits.get(i).name + " " + fruits.get(i).totalWeight);
}
System.out.println("总价值:" + maxValue);
}
}