import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
Beanbag.test();
}
}
class Item {
public String name;
public double weight;
public double value;
Item(String name, double weight, double value) {
this.name = name;
this.weight = weight;
this.value = value;
}
Item(Item item) {
this.name = item.name;
this.weight = item.weight;
this.value = item.value;
}
}
class Beanbag {
public static LinkedList<Item> packBean(int packCapacity, Item[] items) {
LinkedList<Item> beans = new LinkedList<Item>();
Arrays.sort(items, new Comparator<Item>() {
public int compare(Item left, Item right) {
double leftUnitPrice = left.value / left.weight;
double rightUnitPrice = right.value / right.weight;
if (leftUnitPrice > rightUnitPrice) {
return -1;
} else if (leftUnitPrice == rightUnitPrice) {
return 0;
} else {
return 1;
}
}
});
int leftPackCapacity = packCapacity;
for (int i = 0; i < items.length; i++) {
if (leftPackCapacity > items[i].weight) {
leftPackCapacity -= items[i].weight;
beans.add(new Item(items[i]));
} else {
double unitPrice = items[i].value / items[i].weight;
double packWeight = leftPackCapacity;
double packValue = packWeight * unitPrice;
beans.add(new Item(items[i].name, packWeight, packValue));
leftPackCapacity = 0;
break;
}
}
return beans;
}
public static void test() {
Item[] items = { new Item("黄豆", 100, 100), new Item("绿豆", 30, 90), new Item("红豆", 60, 120),
new Item("黑豆", 20, 80), new Item("青豆", 50, 75) };
LinkedList<Item> beans = packBean(100, items);
double maxValue = 0;
System.out.println("装了如下物品:");
for (int i = 0; i < beans.size(); i++) {
maxValue += beans.get(i).value;
System.out.println(beans.get(i).name + " " + beans.get(i).weight);
}
System.out.println("总价值:" + maxValue);
}
}