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 Mochila en una matriz de enteros infinitos?
Al leer el enunciado del problema, en primer lugar, parece ser 0-1 Knapsack
problema, pero estoy confundido que puede 0-1 Knapsack algo
usarse en una corriente de números enteros. Supongamos que escribo un programa recursivo para el problema anterior.
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));
}
Ahora bien, cuando la función anterior recurrirá a una serie infinita, la primera llamada en función max
decir knapsack(sum, count, idx +1)
Nunca volveremos ya que mantendrá en ignorar el elemento actual. Incluso si cambiamos el orden de la llamada en la función max
, aún existe la posibilidad de que la primera llamada nunca vuelva. ¿Hay alguna forma de aplicar knapsack
algo en tales escenarios?
¿Está buscando los primeros cinco números consecutivos * * cuya suma es 20? – Davidann
Esto es más difícil que el problema de la mochila. Tenemos una restricción adicional: debemos encontrar la combinación más temprana de números cuya suma es veinte. En otras palabras, debemos considerar varias mochilas: los primeros 5 elementos, luego los primeros 6, luego los primeros 7, etc. – cheeken
@David: no ... no hay tal condición ... –