import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
GreedyTemplate greedyTemplate=new GreedyTemplate();
greedyTemplate.test1();
greedyTemplate.test2();
greedyTemplate.test3();
}
}
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;
}
}
class GreedyTemplate {
public static LinkedList<Item> packBean(int packCapacity, Item[] items){
LinkedList<Item> beans = new LinkedList<Item>();
Arrays.sort(items, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
double left=o1.totalValue/ o1.totalWeight;
double right=o2.totalValue/o2.totalWeight;
if(left>right)
{
return -1;
}
else if(left==right)
{
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;
beans.add(new Item(items[i]));
}
else{
double price=items[i].totalValue/items[i].totalWeight;
double weight=leftpackcapacity;
double value=weight*price;
beans.add(new Item(items[i].name,weight,value));
leftpackcapacity=0;
break;
}
}
return beans;
}
public static void test1() {
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).totalValue;
System.out.println(beans.get(i).name + " " + beans.get(i).totalWeight);
}
System.out.println("总价值:" + maxValue);
}
public static void test2() {
Item[] items = {
new Item("黄豆", 100, 100),
new Item("绿豆", 30, 90),
new Item("红豆", 60, 120),
new Item("黑豆", 20, 80),
new Item("青豆", 50, 75),
new Item("白豆", 50, 50)
};
LinkedList<Item> beans = packBean(50, items);
double maxValue = 0;
System.out.println("装了如下物品:");
for (int i = 0; i < beans.size(); ++i) {
maxValue += beans.get(i).totalValue;
System.out.println(beans.get(i).name + " " + beans.get(i).totalWeight);
}
System.out.println("总价值:" + maxValue);
}
public static void test3() {
Item[] items = {
new Item("黄豆", 100, 100),
new Item("绿豆", 30, 90),
new Item("红豆", 60, 120),
new Item("黑豆", 20, 80),
new Item("青豆", 50, 75),
new Item("白豆", 50, 50)
};
LinkedList<Item> beans = packBean(100, items);
double maxValue = 0;
System.out.println("装了如下物品:");
for (int i = 0; i < beans.size(); ++i) {
maxValue += beans.get(i).totalValue;
System.out.println(beans.get(i).name + " " + beans.get(i).totalWeight);
}
System.out.println("总价值:" + maxValue);
}
}