您是否需要对输入进行排序以进行动态编程背包

Tom*_*y K 8 knapsack-problem dynamic-programming

在我发现的每个示例中,使用动态编程针对1/0背包问题进行了动态编程,其中项目具有权重(成本)和利润,它从未明确表示要对项目列表进行排序,但是在所有示例中,它们都通过增加两个值来进行排序权重和利润(示例中权重越高,利润越高)。所以我的问题是,当从项目数组/列表中将项目添加到矩阵中时,我可以按任何顺序添加它们,还是添加权重或利润最小的项目?因为从多个示例中我发现我不确定这是否只是一个巧合,否则您实际上每次确实需要将最小的权重/利润放入矩阵中

Shu*_*rma 7

动态规划解决方案只不过是以有效的方式选择所有可能性(蛮力)(只需保存它们)... 注意我们考虑所有子集...现在,如果列表已排序,则总数子集将相同,子集将相同,最后所有子集都将被考虑..所以或多或少,即使列表是任何顺序,也没关系......


小智 7

不,您不需要对权重进行排序,因为每一行都给出了该行权重限制下的最大可能值。最大值将出现在该行的最后一列。