動態規劃 找硬幣問題

2022-04-10 00:47:26 字數 876 閱讀 1773

問題:

有3,5,7分錢的硬幣,以及給定的數額n,求找開n所需的最小硬幣數目。

擴充套件問題:

有(v1, v2, v3, ..., vm)硬幣面額,面額數目為m,以及給定的數額n,求找開n所需的最小硬幣數目,或斷定不能找開。

硬幣找零是比較經典的動態規劃問題,在某些面額組合的情況下,可以用貪心演算法求解。《演算法導論》中將硬幣找零問題作為貪心演算法的例子。在這裡,隨機選取三個素數作為面額。

對於某一數額n,若能被給定的面額找開,可以分為兩種情況。

1、n恰好等於某一硬幣的面額,這樣找開n只需一枚硬幣;

2、n需要多枚硬幣才能找開。

現在主要分析第二種情況。當一枚硬幣找不開時,則數額n一定可以被分為兩個子數額n1,n2的找零問題,其中n1+n2=n,且要分別找到n1,n2的最優解。

定義f(n)為對數額n的找零最小硬幣數,可以寫出遞迴式。

f(n) = 1                                   n恰好為某一硬幣面額

f(n) = min(i from 1 to n/2) ( f(i) + f(n-i) )     n不是硬幣面額

可以利用動態規劃求解。以23為例進行計算。n1

2345

6789

1011

1213

1415

1617

1819

2021

2223

f(n)

-1-11-1

1212

3232

3234

3434

345f(23) = 5

數額23在硬幣面額為(3,5,7)的情況下可以找開,最少需要5枚硬幣。

動態規劃 硬幣問題

這是乙個固定重點的最長路和最短路問題,可用動態規劃問題來求解 代表硬幣總值,n代表硬幣總數,v陣列儲存硬幣各個面值,d代表從i出發到結點0的路徑的最長路徑長度或最短路徑長度 vis代表是否訪問過該結點 int n,s,v maxn d maxn vis maxn int dpmax int s re...

動態規劃 硬幣問題

2013 07 11 03 17 5610人閱讀收藏 舉報 演算法和資料結構學習 79 最少硬幣問題 假設有3種不同的硬幣,幣值分別是coinvalue 每一種硬幣的數量是有限的,分別是coinnum 給定乙個數值target 18,找出一種硬幣數最少的方法,輸出最少的硬幣數。思路 動態規劃。問題定...

動態規劃 硬幣問題

問題描述 輸入總金額n,硬幣不同價值的種類m,m種硬幣的面值 例如 15 6 1 2 7 8 12 50 輸出湊成n最少的硬幣數 1 貪心演算法 每次都選擇面值最大的。問題在於,求出來的並不是最優解,上例中,用貪心解出來的結果為3 1,2,12 而實際為2 7,8 include includeus...