我知道Knapsack是NP-complete,DP可以解决。 他们说DP解决scheme是pseudo-polynomial ,因为它是“input长度”(即input编码所需的位数)的指数。 不幸的是我没有得到它。 有人可以慢慢地向我解释这个pseudo-polynomial东西吗?
这是我的任务 背包问题是计算机科学中的一个典型问题。 最简单的forms是将不同重量的物品装入背包,使背包以指定的总重量结束。 你不需要适应所有的项目。 例如,假设你想让你的背包重达20磅,而你有五件重量为11,8,7,6和5磅的物品。 对于less数项目,人类通过检查来解决这个问题非常好。 所以你可能会发现,只有8,7和5个项目的组合才会增加到20个。 我真的不知道从哪里开始写这个algorithm。 我理解recursion适用于阶乘和三angular形数字。 不过现在我迷路了。
在那里我有一个代码,它通过背包algorithm(bin packing NP-hard problem)来计算最优值: int Knapsack::knapsack(std::vector<Item>& items, int W) { size_t n = items.size(); std::vector<std::vector<int> > dp(W + 1, std::vector<int>(n + 1, 0)); for (size_t j = 1; j <= n; j++) { for ( int w = 1; w <= W; w++) { if (items[j-1].getWeight() <= w) { dp[w][j] = std::max(dp[w][j-1], dp[w – items[j-1].getWeight()][j-1] […]