現有一個載重爲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()); } }