现有一个载重为W的货船,集装箱i个,重量分别为wi,在不考虑体积的情况下,要求装载的数量最多。
这是一个简单的最优装载问题,类似01背包问题,但考虑的不是价值而是数量,所以每次选取剩余集装箱中重量最轻的就可以,通过贪心算法就能得到最优解。
package test; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by saishangmingzhu on 2018/11/30. */ public class BinPackingProblem { public static void main(String[] arg) { new BinPackingProblem().greedy(); } /** * 贪心算法 */ public void greedy(){ int rucksackWeight=10; List<Integer> goodsList=new ArrayList<>(); goodsList.add(1); goodsList.add(3); goodsList.add(7); goodsList.add(3); goodsList.add(1); goodsList.add(5); goodsList.add(4); Collections.sort(goodsList); int surplus=rucksackWeight; List<Integer> resultGoodsList=new ArrayList<>(); for (Integer goods:goodsList){ if (surplus>=goods.intValue()){ surplus=surplus-goods.intValue(); resultGoodsList.add(goods); } } System.out.println(resultGoodsList.size()); } }