Il modo più semplice per spiegarlo è con un esempio.
Ti viene dato il numero 19
e hai una serie di numeri tra cui scegliere: 1, 2, 3, 4, 6
Quando si scelgono i valori dall'elenco (che può essere duplicato), il più piccolo numero di valori che somma fino a 19
è 4
:
6, 6, 6, 1
6, 6, 4, 3
Ora l'elenco di numeri che voglio selezionare è 6, 6, 4, 3
perché quando tracciato su un grafico, disegna un gradiente più fluido che va da numeri più grandi a numeri più piccoli. 6, 6, 6, 1
è un calo improvviso mentre passa dall'ultimo 6
a 1
.
Potrei sbagliarmi (e, per favore, correggimi se è così) ma penso che un modo migliore per esprimere questo desiderio sia scegliere l'elenco in cui il prodotto di ciascuno dei numeri è il valore più grande.
6 * 6 * 6 * 1 = 216
6 * 6 * 4 * 3 = 432 (choose this list)
Un altro esempio è scegliere 4, 3
anziché 6, 1
per un valore di 7
.
Come si può calcolare questo utilizzando un algoritmo (idealmente non brute-force!) da usare con qualsiasi valore totale e un insieme arbitrario di numeri tra cui scegliere?