现有一个载重为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 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 resultGoodsList=new ArrayList<>();
for (Integer goods:goodsList){
if (surplus>=goods.intValue()){
surplus=surplus-goods.intValue();
resultGoodsList.add(goods);
}
}
System.out.println(resultGoodsList.size());
}
}