貨幣兌換問題(動態規劃法) Python實現

2022-09-09 10:21:14 字數 1215 閱讀 7259

# 動態規劃法求解貨幣兌換問題

# 貨幣系統有 n 種硬幣,面值為 v1,v2,v3...vn,其中 v1=1,使用總值為money的錢與之兌換,求如何使硬幣的數目最少,即 x1,x2,x3...xn 之和最小

# 輸入:各種貨幣的面值 v1,v2,v3...vn;要兌換的總值 money

# 輸出:兌換得到最少的貨幣數量

1

#修改貨幣系統的面額

2 v = [1,2,5,10,50]3#

修改要兌換的貨幣量money

4 money = 253

1

#每種貨幣初始數量為 0

2 x = [0]*len(v)3#

建立兌換貨幣對應數量表 q = [money+1][len(v)+1]

4 q = [ ([0]*(len(v)+1))for i in range (0,money+1) ]

1

#q 表初始化:首列首行都置0

2for i in range (0,money+1):

3 q[i][0] =0

4for i in range (0,len(v)+1):

5 q[0][i] = 0

1

#填表過程

2for i in range (1,money+1):

3for j in range (1,len(v)+1):

4if v[j-1] == i: #

面值 = i

5 q[i][j] = 1

6elif v[j-1] > i: #

面值 > i

7 q[i][j] = q[i][j-1]

8else: #

面值 < i

9 q[i][j] = q[i-v[j-1]][j] + 1 #

i-v[j] 為 i 面值

函式呼叫:

1

print(q);print('\n'

)2print('

兌換得到最少的貨幣數量為:

',q[money][len(v)])

執行結果:

1 兌換得到最少的貨幣數量為: 7

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 1 階段 把問題分成幾個相互聯絡的有順序的幾個環節,這些環節即稱為階段。2 狀態 某一階段的出發位置稱為狀態。3 決策 從某階段的乙個狀態演變到下乙個階段某狀態的選擇。4 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...

動態規劃法

有些問題在分解時會產生許多子問題,且分解出的自問題互相交織,因而在解這類問題時,將可能重複多次解乙個子問題。這種重複當然是不必要的,解決方法可以在解決每個子問題後把它的解 包括其子子問題的解 保留在乙個 中,若遇到求與之相同的子問題時,dp演算法又稱動態規劃,是資訊學競賽中選手必須熟練掌握的一種演算...

動態規劃法

最近遇到了一道挺有意思的演算法題 四種硬幣 1元3元4元5元 問 想要湊成n元錢最少幾枚硬幣?public class coinsgamemain fun 7,is public static void fun int k,int is i1 l min i2 if l k private stat...