现有一个载重为W的货船,集装箱i个,重量分别为wi,在不考虑体积的状况下,要求装载的数量最多。
java
这是一个简单的最优装载问题,相似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()); } }