【发布时间】:2014-01-29 17:31:54
【问题描述】:
问题是让我找到一个列表的所有可能子集,这些子集加在一起(成对、单独或多个)将等于给定的数字。我已经阅读了很多关于子集和问题的内容,但不确定这是否适用于这个问题。
为了更详细地解释这个问题,我有一个允许我购买的最大重量糖果。 我知道我存储在一个列表中的十块不同糖果的重量
candy = [ [snickers, 150.5], [mars, 130.3], ......]
I can purchase at most max_weight = 740.5 grams EXACTLY.
因此,我必须找到与 max_weight 完全相等的所有可能的糖果组合。我将在 python 中编程。不需要确切的代码,只需要它是否是子集和问题以及如何进行的可能建议。
【问题讨论】:
-
这被称为“背包问题”
-
不是,乍一看可能是背包,但没有优化的价值。
-
这看起来不像是背包问题。没有与糖果相关的价值,也没有重量的上限。权重似乎是一个精确的约束,而不是一个上限约束。所以我会说这个/是/子集和问题
-
啊,我显然已经纠正了:P
-
每种糖果可以购买多少个?如果只有一个,这是子集和。否则,这是一个更一般的整数线性规划问题。
标签: python algorithm recursion