从一系列数字中任意组合相加后等于某个值的所有组合算法?

问题描述:

一组数字 list = [5,10,15,45,10,30,25,35,40,10,20,20],可能有重复,要求列出所有组合,使得组合中的数字之和为 50,或指定某个数值。

比如:上面的那一列数字可以产生组合:

5 + 10 + 15 +20 = 50
20 + 20 + 10 = 50 
45 + 5 = 50
10 + 10 + 30 = 50
10 + 10 + 10 + 20 = 50 // list 中有 3 个 10
....

等等。

要列出所有和为 50的组合,list 里的元素可能重复。
这是属于什么算法模型?不太懂,希望指教下。

阅读 7.2k
2 个回答

应该是楼上的,
如果S是结果集用S(a[1,n],50)表示所有组合是50的解。
S(a[1..n],50)={a[1]+S(a[2..n],45)}+{S(a[2..n],50)}

这是贪心算法的0-1背包问题吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题