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


# 動態規划法求解貨幣兌換問題
# 貨幣系統有 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
2 for i in range (0,money+1):
3     Q[i][0] = 0
4 for i in range (0,len(v)+1):
5     Q[0][i] = 0
1 # 填表過程
2 for i in range (1,money+1):
3     for j in range (1,len(v)+1):
4         if v[j-1] == i:        # 面值 = i
5             Q[i][j] = 1
6         elif v[j-1] > i:       # 面值 > i
7             Q[i][j] = Q[i][j-1]
8         else:                  # 面值 < i
9             Q[i][j] = Q[i-v[j-1]][j] + 1        # i-v[j] 為 i 面值

函數調用:

1 print(Q);print('\n')
2 print('兌換得到最少的貨幣數量為:',Q[money][len(v)])

運行結果:

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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM