货币兑换问题(动态规划法)——Python实现

孤街醉人 提交于 2019-12-01 17:38:41
# 动态规划法求解货币兑换问题
# 货币系统有 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 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!