![](/img/trans.png)
[英]Number of ways to choose elements from array if the sum of the group is at least K
[英]Find the number of ways to form an element K from an array of n elements
给定一个包含n
元素的数组,找出从这n
元素形成元素K
的方法数。 例如,如果数组为{3,9,1,4,2,5}
且K = 5
可能的方式有:
1+4,
2+3,
1+2+2,
1+1+1+1+1,
1+3+1,
1+1+1+2
所以答案应该是 6。请为此提出一个算法。
基本算法如下所示:
x
:
x
等于k
,则[x]
是一个解x
小于k
,则找到kx
的解并将它们与x
组合在代码中实现这一点的最简单方法是作为一个简单的递归算法(这里是 Python):
def find_sums(array, k):
for x in array:
if x == k:
yield [x]
elif x < k:
for s in find_sums(array, k - x):
yield [x] + s
但是请注意,这对于较大的数组来说效率不高,因为所有对find_sums(array, k - x)
调用find_sums(array, k - x)
一遍又一遍地重复,但这可以通过记忆化或动态编程轻松修复。 此外,结果可能包含一些“重复项”,例如[1, 4]
和[4, 1]
; 您可以通过构造来避免这些(跟踪部分结果中的最大元素)或之后将它们过滤掉(例如,排序并转换为集合)。 此外,如果您不希望结果中出现单数列表,您也必须将它们过滤掉。
这些调整留给读者作为练习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.