什么时候应该使用动态编程?通过动态编程分析我的特定问题。是否可以使用动态编程

时间:2019-05-26 09:48:03

标签: algorithm recursion dynamic-programming

请查看我的问题:

选择器需要将订购的物品带回车站。他有一个手推车,一次可以容纳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;
}

我认为我的代码还可以,但是我希望找到更好的解决方案,我想到了动态编程,但这让我头疼。 我很高兴有任何建议 非常感谢!

0 个答案:

没有答案