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 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));
}
max
上記の関数が無限配列で呼び出されると、関数 ieの最初の呼び出しはknapsack(sum, count, idx +1)
、現在の要素を無視し続けるため、返されません。関数の呼び出しの順序を変更してmax
も、最初の呼び出しが返されない可能性は依然としてあります。knapsack
そのようなシナリオでアルゴを適用する方法はありますか?