请查看我的问题:
选择器需要将订购的物品带回车站。他有一个手推车,一次可以容纳K个物品(所有物品的大小均相同)。他有N个订单可供选择。他还知道一个订单中有多少项目以及该订单的价值。他想选择总价值尽可能大的订单。
创建一个程序以帮助他知道他可以选择的最大订单价值是多少。
一次最多可以拣选K个物品 N个接单数量 -1 <= K <= 30 -1 <= N <= 10000 -1 <=每个订单的商品数量<= 100 -1 <=每个订单的值<= 100
K N
具有N [i]的列表N是订单i的项目数
具有V [i]的列表V是阶i的值
选择器可以获取的最大值
K = 10
N = 6
5 6 7 1 2 3
1 2 3 2 3 4
9
我试图通过自己的递归来解决,请参见我的代码
private static int getMaxValueList(int k, List<Order> orders) {
int current_max = 0;
for (int i = 0; i < orders.size(); i++) {
Order orderi = orders.get(i);
List<Order> removedOrdersi = new ArrayList<>(orders);
removedOrdersi.remove(i);
int totalVali = 0;
if (k > orderi.getNumItem()) {
totalVali = orderi.getVal() + getMaxValueList(k - orderi.getNumItem(), removedOrdersi);
} else if (k == orderi.getNumItem()) {
totalVali = orderi.getVal();
}
if (current_max < totalVali) {
current_max = totalVali;
}
}
return current_max;
}
private static class Order {
int numItem;
int val;
}
我认为我的代码还可以,但是我希望找到更好的解决方案,我想到了动态编程,但这让我头疼。 我很高兴有任何建议 非常感谢!