编辑代码

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;


class Main {
	public static void main(String[] args) {
        //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
		  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>(); // 记录需要装包的豆子

        //1. 按照单价从高到低进行排序
     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;
             }
         }
     });

        //2. 单价从高到低依次取出豆子
       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);

    }
}