33,006
社区成员
发帖
与我相关
我的任务
分享
package backpack;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BackPack {
private static List<List<Integer>> allot( int[] items,
int n) {
int MAX_SUM = 200;
int[] arr = Arrays.copyOf(items, items.length);
Arrays.sort(arr);
List<List<Integer>> list = new ArrayList<List<Integer>>();
int[] sum = new int[n];// 保存每个包已放物品的总重量
for (int i = arr.length - 1; i >= 0; --i) {// 降序
for (int j = 0; j < n; ++j) {// 检查包
if (arr[i] + sum[j] > MAX_SUM) {// 装不下,继续检查下一个包
continue;
}
List<Integer> li;
if (j < list.size()) {// 包已存在
li = list.get(j);
} else {// 包不存在
li = new ArrayList<Integer>();
list.add(li);
}
li.add(arr[i]);
sum[j] += arr[i];
break;// 第i个物品已经装好了,不用检查包了
}
}
return list;
}
public static void main(String[] args) {
int[] items1 = { 50, 70, 100, 10 };
// int[] items2 = { 101, 101, 100, 98, 1 };
List<List<Integer>> list = allot(items1, 5);
for (List<Integer> list2 : list) {
for (int val : list2) {
System.out.print(val + " ");
}
System.out.println();
}
}
}