ETH官方钱包

切換
舊版
前往
大廳
主題

ZeroJudge - c317: 硬幣問題!前傳 解題心得

Not In My Back Yard | 2018-12-28 20:50:18 | 巴幣 0 | 人氣 312

題目連結:


題目大意:
第一列給定一正整數 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



範例輸出:
-1
16
16



解題思維:
可以用這題的 DP 作法。但是也可以單純使用以下方法:

先拿面額大的硬幣 S 湊到盡可能接近 X (也就是 X ÷ S 個硬幣)。如果已經湊到X,即是答案;反之,看剩下所需的錢是否為另一硬幣 S 的倍數,是的話,答案也是呼之欲出;若否,拿掉一枚 S 再看剩下所需的錢是否為 S 的倍數,以此類推。

如果 S 拿光了也還是湊不出來,表示無解,即輸出「-1」。



以 X = 144 、 a = 11 、 b = 3 為例:
一開始挑 13 枚 11 塊錢的硬幣,發現 144 - 13 × 11 = 1 並不是 3 的倍數;
挑掉一枚 11 塊錢的硬幣,144 - 12 × 11 = 12 ,是 3 的倍數。

所以所需最小硬幣數量為 12 + 12 ÷ 3 = 16 枚。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

追蹤 創作集

作者相關創作

更多創作