Algorithm 总和组合表

Algorithm 总和组合表,algorithm,Algorithm,我需要一个解决这个问题的算法: 给定一组n个自然数x1,x2,…,xn,一个数S和k。将从集合中选取的k个数字(一个数字可以多次选取)的总和与总和S形成 不同的表述:列出S的每一个可能的组合,有界:n你可以通过在选择x元素的方式上强加一个顺序来消除排列。将您的表设为三个t[m,v,n]=由m来自x1..xn的数字组成的总和v的组合数。现在观察t[m,v,n]=t[m,v,n-1]+t[m-1,v-x\n,n]。这就解决了排列问题,只需从x中出现的和按相反顺序生成和。例如,它将生成15+14+1和

我需要一个解决这个问题的算法:

给定一组n个自然数x1,x2,…,xn,一个数S和k。将从集合中选取的k个数字(一个数字可以多次选取)的总和与总和S形成


不同的表述:列出S的每一个可能的组合,有界:n你可以通过在选择x元素的方式上强加一个顺序来消除排列。将您的表设为三个
t[m,v,n]
=由
m
来自
x1..xn的数字组成的总和
v
的组合数。现在观察
t[m,v,n]=t[m,v,n-1]+t[m-1,v-x\n,n]
。这就解决了排列问题,只需从x中出现的和按相反顺序生成和。例如,它将生成15+14+1和14+14+2,但不会生成14+15+1


(您可能不需要填写整个表,因此您可能需要延迟计算;事实上,这里可能需要一个记忆递归函数。)

看起来像背包问题(),特别是,看起来像没有数字k的整数分区问题
  problem instance: {1,2,5,9,11,12,14,15}, S=30, k=3
  There are 4 possible combinations
  S=1+14+15, 2+14+14, 5+11+15, 9+9+12.   
1. Initialize t[1,x(i)], for every i.   
2. Then use formula t[m,v]=Sum(t[m-1,v-x(i)], every i satisfied v-x(i)>0), 2<=m<=k.   
3. After obtaining t[k,S], I can trace back to find all the combinations.