给出了许多有限的整数集,例如:
A = {1,2,3}
B = {2,3,4}
C = {3,4,5}
也是一个数字,例如6.问题是通过从每组中选择一个数字,从集合中确定不能用于求和的数字6。例如,A中的1有效,因为1 + 2 + 3 = 6(2来自B,3来自C)。 C中的5是无效的,因为你不能使用5加总到6(你总是得到至少1 + 2 + 5 = 8)。
你怎么能有效地做到这一点?
答案 0 :(得分:4)
我假设3套只是一个例子而实际的套数不固定
假设我们有m
个集合,n
个数字总和最大可能总和S
。 (在您的示例中m = 3
,n = 9
,S = 12
)。
然后询问是否可以使用集合t
中的数字s
来实现和x
等同于以下内容:其他m - 1
可以设置(除了集s
1}})加起来为x - t
?
此问题具有复杂性O(n*S)
的伪多项式解,非常类似于subset sum problem。
因此,您可以针对m - 1
集合的每个组合解决此问题,它会给您O(n*S*m)
复杂性。