Algorithm 常和组合数

Algorithm 常和组合数,algorithm,combinatorics,Algorithm,Combinatorics,假设您得到了一系列整数,包括L1、L2、…、Ln和一个整数 我正在寻找一种方法来有效地计算索引组合j1,j2,…,jn,以便L1[j1]+L2[j2]+…+Ln[jn]=S 以L1=[0,1,1,2],L2=[0,1],L3=[0,1,2,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 i、 e.我要找的答案是10这个问题是NP完全问题。你可以 1) 蛮力 或者,如果你有一些额外的财产

假设您得到了一系列整数,包括L1、L2、…、Ln和一个整数

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

L1=[0,1,1,2],L2=[0,1],L3=[0,1,2,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

i、 e.我要找的答案是
10

这个问题是NP完全问题。你可以

1) 蛮力

或者,如果你有一些额外的财产(例如,涉及的总金额很小),你也可以考虑


2) 使用动态规划来获得伪多项式算法。

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

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