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 Zaino su serie intera infinita?
Leggendo la dichiarazione del problema, sembra prima di essere 0-1 Knapsack
problema, ma sono confuso che può 0-1 Knapsack algo
essere utilizzato su un flusso di numeri interi. Supponiamo di scrivere un programma ricorsivo per il problema precedente.
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));
}
Ora, quando la funzione di cui sopra inviterà un array infinito, la prima chiamata di funzione max
cioè knapsack(sum, count, idx +1)
sarà mai ritorno, esso continuerà a ignorare l'elemento corrente. Anche se cambiamo l'ordine della chiamata nella funzione max
, c'è ancora la possibilità che la prima chiamata non ritorni mai. C'è un modo per applicare knapsack
algo in tali scenari?
Cercate i primi cinque numeri consecutivi * * la cui somma è 20? – Davidann
Questo è più difficile del problema dello zaino. Abbiamo un ulteriore vincolo: dobbiamo trovare la prima combinazione di numeri la cui somma è venti. In altre parole, dobbiamo considerare più zaini: i primi 5 elementi, quindi i primi 6, poi i primi 7, ecc. – cheeken
@David: no ... non esiste tale condizione ... –