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
在这种情况下应用算法?