116得票5回答
为什么背包问题是伪多项式?

我知道背包问题是NP完全问题,但它可以通过DP解决。人们说DP解法是伪多项式,因为它在“输入长度”(即编码输入所需的位数)上是指数级别的。不幸的是我还没有理解这个概念。有人能够慢慢地向我解释一下什么是伪多项式吗?

33得票3回答
具有依赖项权重的0/1背包问题?

标准的 0/1 背包问题要求每个物品的重量都不依赖于其他物品,因此动态规划是解决该问题的一种有效算法。但现在我遇到了一个类似但是扩展了的问题: 新物品的重量取决于已经放入背包中的先前物品。 例如,我们有五个物品 a, b, c, d 和 e,它们的重量分别为 w_a, ..., w...

25得票14回答
将一个数字列表分成两个等和列表的算法

有一个数字列表。 需要将该列表分成两个大小相等的列表,使它们的和之差最小。需要打印这两个列表的和。#Example: >>>que = [2,3,10,5,8,9,7,3,5,2] >>>make_teams(que) 27 27 以下代码算法在某些情况下是...

24得票2回答
内存受限的硬币找零问题,适用于小于十亿的数字

我在一次培训中遇到了这个问题。我们有N个不同的值(N<= 100)。我们把这个数组称为A[N],对于这个数组A,我们确定其中有一个1,而且A[i] ≤ 109。其次,我们给出了数字S,其中S ≤ 109。 现在我们需要使用这些值来解决经典的硬币问题。实际上,我们需要找到最少...

19得票4回答
如何使用背包算法找出袋子中有哪些元素,而不仅仅是袋子的价值?

我这里有一段代码,使用背包算法(二进制装箱NP难问题)计算出最优值:int Knapsack::knapsack(std::vector<Item>& items, int W) { size_t n = items.size(); std::vector&...

19得票6回答
你需要为动态规划背包问题排序输入吗?

我发现在动态规划解决01背包问题时,每个例子中都存在物品的重量(成本)和收益,但从未明确提到需要对物品列表进行排序。然而,在所有这些例子中,它们都按照重量和收益递增的顺序进行排序(在这些例子中,重量越大,利润越高)。因此,我的问题是:当将物品从物品数组/列表添加到矩阵中时,我是否可以以任何顺序...

18得票4回答
如果子问题没有重叠,那么DP如何帮助解决0/1背包问题?

考虑典型背包问题的以下输入。V = [10,8,12] W = [2,3,7] i = 1,2,3 C = 10 我尝试使用带记忆化的递归来解决这个示例,但没有发现重叠子问题。递归过程的签名:knapsack(int c, int i) 最初被称为knapsack(10,1) 解决方...

18得票5回答
多重约束背包问题

如果有多个限制条件(例如,体积限制和重量限制,其中每个物品的体积和重量不相关),我们就会遇到多重约束背包问题、多维背包问题或m维背包问题。 如何用最优化的方式编写代码?可以开发蛮力递归解决方案。也许是分支和界限,但基本上在某些情况下是指数级的,直到进行某种记忆化或使用动态规划,否则如果做得不...

18得票10回答
如何递归地求解“经典”的背包问题算法?

这是我的任务 背包问题是计算机科学中的经典问题。在其最简单的形式中,它涉及将不同重量的物品放入背包中,使得背包最终具有指定的总重量。您不需要把所有物品都放进去。例如,假设您想让您的背包重量恰好为20磅,并且您有五个物品,重量分别为11、8、7、6和5磅。对于少量物品,人类可以通过检查解...

17得票2回答
背包问题 - 枚举算法

我发现这段代码使用暴力机制来解决背包问题(主要是为了学习,所以不必指出动态规划更有效)。我使代码工作,并理解了其中大部分内容。但是,这里有个问题: 我注意到这两个条件语句,我不知道它们是如何工作以及为什么它们在代码中- 我知道它们非常重要,因为我所做的任何更改都会导致算法产生错误的结果:// ...