題目連結:
題目大意:
給定兩個正整數 C (介於 1 ~ 1, 000 )、 N (介於 1 ~ 10 ),接下來會有 N 個硬幣的面額( C 跟硬幣面額的單位都是美分)。
求使用那 N 種硬幣湊出 C 美分的可能的最少硬幣數。(可以假定 C 一定是這 N 種硬幣所組成)
範例輸入:
93 5
25
50
10
1
5
範例輸出:
7
解題思維:
觀察以下圖表:
引進面額 1 的時候,大家的最少硬幣方法數就是自己的金額。
當引進面額 2 的時候,可以發現金額 ≧ 2 都發生了一些改變。因為例如金額 M = 15 ,它現在最少的方法數可以從 15 - 2 = 13 的方法數 + 1 得來;而 M = 13 ,又可以從 13 - 2 = 11 的方法數 + 1 得來,以此類推。
引進面額 5 的時候,也發生了類似面額 2 的事情。
所以我們可以發現,我們可以藉由 DP 的思維來完成此題的要求。
每引進一個硬幣面額 P ,則對於所有金額介於 P ~ C ( C 是題目的所求金額)的 M 值,他們的最少硬幣數可以從以下式子得知:
M 的硬幣數 = M - P 的硬幣數 + 1 跟 M 先前最少的硬幣數,兩者取最小值。
因此每輸入進一個新面額,我們就可以用迴圈去跑 P ~ C 做一次上面的式子,去更新硬幣數。
最後,再看 C 現在的硬幣數,即是所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。