題目連結:
第一列給定一正整數 N ( N ≦ 1, 000),代表接下來有 N 筆測試資料。
每筆測試資料有三個正整數 X 、 a 、 b ( 1 ≦ X 、 a 、 b ≦ 1, 000 ),代表現在有兩種硬幣面額 a 、 b ,問是否能湊出 X 元。
若能湊出 X 元,就輸出最少所需的錢幣;反之,輸出「-1」。
3
258 24 20
144 11 3
309 24 9
可以用
這題的 DP 作法。但是也可以單純使用以下方法:
先拿面額大的硬幣 S1 湊到盡可能接近 X (也就是 X ÷ S1 個硬幣)。如果已經湊到X,即是答案;反之,看剩下所需的錢是否為另一硬幣 S2 的倍數,是的話,答案也是呼之欲出;若否,拿掉一枚 S1 再看剩下所需的錢是否為 S2 的倍數,以此類推。
如果 S1 拿光了也還是湊不出來,表示無解,即輸出「-1」。
以 X = 144 、 a = 11 、 b = 3 為例:
一開始挑 13 枚 11 塊錢的硬幣,發現 144 - 13 × 11 = 1 並不是 3 的倍數;
挑掉一枚 11 塊錢的硬幣,144 - 12 × 11 = 12 ,是 3 的倍數。
所以所需最小硬幣數量為 12 + 12 ÷ 3 = 16 枚。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。