![](/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.