n個の要素の配列(例えば[1,2])と数 'k'(例えば6)を与えた場合、合計= K与えられた集合から与えられた数(繰り返しが許される)を合計するすべての方法を見つける
私は考えることができアルゴリズムは力ずくである
1 1 1 1 1 1
1 1 1 1 2
1 1 2 2
2 2 2
ので、与えられた例の答えは4になりますため、我々はすべての可能なシナリオをシミュレートし、与えられた状態から、我々は結果に到達できないときに停止。
arr[] = [1,2]
k = 6
globalCount =0;
function findSum(arr,k)
{
if(k ==0)
globalCount++
return
else if(k<0)
return
for each i in arr{
arr.erase(i)
tmp = k
findSum(arr,tmp)
while(k>=0){
findSum(arr,tmp -= i)
}
}
私は私の解決策は、そこに最も効率的なものであればわかりません。コメントしてください/正しいか、より良い解決策への指針を示してください。
EDIT:誰かが私のコードとsolnコードの実行時の複雑さを私に与えることができたら本当に感謝します。 ) 地雷コードの複雑さ私が思うに、Big-O(n^w)w = k/avg(arr [0] .. arr [n-1])
http://en.wikipedia.org/wiki/Partition_%28number_theory%29 –
[数字のパーティションを生成する](http://stackoverflow.com/questions/400794/generating- -part-of-a-number) – templatetypedef