Given an infinite positive integer array or say a stream of positive integers, find out the first five numbers whose sum is twenty.
0-1無限整数配列のナップザック?
問題文を読んで、最初0-1 Knapsack
問題のようですが、私は0-1 Knapsack algo
整数のストリーム上で使用することができる混乱しています。上記の問題の再帰的なプログラムを書くと仮定しましょう。上記関数は無限アレイ上に呼び出すときに現在の要素を無視し続けるであろうように
int knapsack(int sum, int count, int idx)
{
if (sum == 0 && count == 0)
return 1;
if ((sum == 0 && count != 0) || (sum != 0 && count == 0))
return 0;
if (arr[idx] > 20) //element cann't be included.
return knapsack(sum, count idx + 1);
return max(knapsack(sum, count, idx +1), knapsack(sum - arr[idx], count -1, idx + 1));
}
次に、すなわちknapsack(sum, count, idx +1)
max
関数の最初の呼び出しが戻ることはありません。 max
の機能で通話の順序を変更しても、最初の通話は返されない可能性があります。このようなシナリオでknapsack
algoを適用する方法はありますか?
あなたは、その合計20である第一5つの*連続で*数字を探していますか? – Davidann
これはナップザックの問題よりも難しいです。私たちには追加の制約があります。つまり、合計が20である最も早い数の組み合わせを見つける必要があります。言い換えれば、私たちは複数のナップザックを考慮する必要があります:最初の5要素、最初の6要素、最初の7要素など – cheeken
@David:いいえ...そのような状態はありません... –