假设您有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
。
答案 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)