剛開始是想利用貪心演算法。假如要找的零錢總額為49元,先找10塊的,可以找40塊,再繼續找5塊的,可以找5塊,再繼續找2塊的,可以找4塊。找夠49元的最少紙幣數為4 + 1 + 2 = 7。但是有些情況可能不太行,例如:有紙幣1元、3元、4元,要找6元的零錢,如果按照貪心演算法的話,是找一張4元和兩張1元,一共3張紙幣。但是找6塊錢的話,最少的方法應該是找兩張3塊。因此貪心演算法在這裡是失效的。
進一步,可以利用動態規劃的演算法來進行求解:
2.1 動態規劃
通過這個遞迴公式我們可以進行填表。**的初始化方式不太一樣。我們以三種紙幣1、3、4,找6塊錢的零錢為例。由於表的第一行表示用面額為0的紙幣找錢,那麼找任意數量的錢,都需要無窮多的紙幣,因此標的第一行初始化為python能夠支援的最大數。第一列表示需要找0塊錢(不需要找錢),用什麼面額的錢找,都只需要0張,因此除了第一格,第一列統一初始化為0。表中的其他初始化為0。
)# 執行結果:([
[9223372036854775807
,9223372036854775807
,9223372036854775807
,9223372036854775807
,9223372036854775807
,9223372036854775807
,9223372036854775807],
[0,1
,2,3
,4,5
,6],
[0,1
,2,1
,2,3
,2],
[0,1
,2,1
,1,2
,2]],2)
最後找6塊錢用的最少的紙幣數是2張。
硬幣找零問題(動態規劃)
給定指定的硬幣種類,面值為 1,3,5 在此具體化些 給定所找零的錢數 sum,給出最少的硬幣找零數,每個種類的硬幣無限使用。看到這問題,當時我想到用貪心演算法來求解,最後求解方案因為巧合對了,後來在網上看到動態規劃的題目,才知道貪心演算法得不到最優解,比如 給定 面值為 1,3,4,給定找零數為 ...
硬幣找零問題 動態規劃問題
看到了 這文章,由於我不太懂他的 所以我按他的題和思路,寫了 思路我就不寫了,就是動態規劃的思路,先保證區域性最優,再慢慢向全區域性最優 include include include include using namespace std const int m 100 int coinsum m...
動態規劃 硬幣找零
時間限制 1000 ms 記憶體限制 65535 kb 描述在現實生活中,我們經常遇到硬幣找零的問題,例如,在發工資時,財務人員就需要計算最少的找零硬幣數,以便他們能從銀行拿回最少的硬幣數,並保證能用這些硬幣發工資。我們應該注意到,人民幣的硬幣系統是 100,50,20,10,5,2,1,0.5,0...