常数和组合的数量

时间:2012-02-16 18:43:22

标签: algorithm combinatorics

假设您有n个整数列表L1,L2,...,Ln和一个整数S

我正在寻找一种方法来有效地计算索引j1,j2,...,jn的组合,以便L1[j1]+L2[j2]+...+Ln[jn] = S

例如,请L1=[0,1,1,2], L2=[0,1], L3=[0,1,2,3,3]S=4。 那么可能的组合是

0+1+3
0+1+3
1+0+3
1+0+3
1+1+2
1+0+3
1+0+3
1+1+2
2+0+2
2+1+1

即。我要找的答案是10

2 个答案:

答案 0 :(得分:2)

这个问题是NP完成的。你可以

1)蛮力

或者,如果您有一些额外的属性(例如,所涉及的总金额很小),您也可以考虑

2)使用动态编程来获得伪拟声算法。

答案 1 :(得分:1)

你可以用DP解决它。复杂性:O(nS)。

Count(i,s) = \sum_j=0..s Count(i-1,j) * Number of elements in list i with value (s-j)