Questa domanda si è presentata come parte di un problema sempre più difficile in un'intervista. È iniziata così semplicemente:Intervista: apportare modifiche per n cents (denominazioni arbitrarie)
(1) Assunzione di una scorta infinita di monete (nelle solite monete da 1, 5, 10, 25 cent). Dato n. centesimi, c'è sempre un modo per apportare modifiche utilizzando le denominazioni normali?
Sì, dal momento che il centesimo divide tutti i possibili valori di n centesimi.
(2) Bene, ora scrivere un programma che accetta n centesimi (positivi), e restituisce un modo possibile di fare il cambiamento per esso
ritorno n centesimi.
(3) Smart ass. Cosa succede se si desidera ridurre al minimo il numero di monete necessarie per apportare la modifica?
Inizia con la più grande denominazione D_I, e prendere il numero massimo di loro in modo tale che non si superi n, m_i. Prendi n - (d_i) (m_i) e ripeti per la prossima denominazione più grande.
(4) Bene, puoi dimostrare che questa soluzione è ottimale?
Sì, {blah, blah}
(5) Ok, * sorriso *, ora cosa succede se, oltre ai n centesimi, è stata data una matrice arbitraria di dimensioni che consiste di denominazioni arbitrarie? È possibile assumere ogni denominazione si verifica solo una volta nella matrice, e che tutte le denominazioni sono positivi
Il mio primo pensiero era solo per ordinare l'array delle denominazioni, e applicare la stessa logica a (4). Fortunatamente, prima di comunicarlo, mi sono accorto e ho capito che non avrebbe funzionato. Ma ora mi sono reso conto che ero in un sottaceto.
Il mio prossimo pensiero è stato quello di applicare il problema della somma parziale a ogni divisore di n, ma ho capito che probabilmente era eccessivo. La soluzione che ho finito per fornire ha appena usato il Change-making problem e l'ho cortocircuitato quando ho trovato la soluzione nella soluzione. Mi sento come se ci deve essere un modo più intelligente di fare questo però ..
Il problema si riduce a: Dato un insieme finito S dei numeri naturali distinti, trovare una combinazione lineare di elementi di S che (1) somma ad un altro numero naturale n, (2) minimizzare la somma dei coefficienti nella lin.combinazione
Questa non è una corretta formalizzazione del problema originale. –
[Questo è] (http://en.m.wikipedia.org/wiki/Change-making_problem). –
Sembra molto simile a un problema di programmazione dinamica. Mi chiedo se il problema dello zaino può ridurre a questo problema se i pesi sono tutti impostati su 0 per tutte le monete. – user3079275