Donada una quantitat , i valors diferents de monedes, de cadascun dels quals se’n disposa de tantes com es vulgui, calculeu una manera de sumar canvi amb el mínim nombre de monedes. Si hi ha diferents solucions, escolliu aquella que usa la moneda de més valor més vegades; en cas d’empat, la que usa la següent moneda de més valor més vegades; etc. Per exemple, si i podem triar entre els valors 1, 3, 5, es pot aconseguir amb només dues monedes: fent , i també . De les dues maneres, la primera usa més monedes de valor 5 que la segona, i per tant seria la que voldríem.
L’entrada consisteix en diversos casos, cadascun amb i , seguits d’ naturals diferents ordenats de forma creixent entre 1 i . Suposeu que està entre 1 i , i que està entre 1 i 1000.
Per a cada cas, escriviu de més petites a més grans les monedes
necessàries per a sumar
amb el mínim nombre de monedes. Escolliu la combinació que usi monedes
de valor més gran en cas d’empat. Si no n’hi ha cap, escriviu
“no”.
Resoleu aquest problema amb programació dinàmica.
Input
6 3 1 2 5 20 4 2 4 6 17 15 4 2 4 6 17 115 11 1 27 49 58 70 72 90 95 97 98 100 1000 3 400 600 1000
Output
6 = 1 5 20 = 2 6 6 6 no 115 = 1 1 1 27 27 58 1000 = 1000