题目描述:
现有的钱币:coins=[1,2,5,7,10]
找零:change(假定为正整数)
求解:如何用最少的钱币进行找零
分析:可以使用动态规划
比如找零8元,可以将问题进行分解
dp[8]=dp[8-coins[j]]+1
即:
dp[8]=dp[8-1]+1=dp[7]+1
dp[8]=dp[8-2]+1=dp[6]+1
dp[8]=dp[8-5]+1=dp[3]+1
dp[8]=dp[8-7]+1=dp[1]+1
初始化:
dp=[change+1]*(change+1) #对应的dp[0],dp[1],dp[2]...dp[change]
dp[0]=0 #因为找0元需要0张钱币
使用的钱币初始化:
coins_used=[0]*(change+1)
代码:
def coin_change(coins,change,dp,coins_used):
'''利用动态规划求解找零需要的钱币张数,以及钱币的使用情况'''
for i in range(1,change+1):
#依次求解,dp[1]~dp[change]
for j in range(len(coins)):
if coins[j]<=i:
#使用这张钱币的前提,纸币的金额数<=需要找零的金额,比如:找零8块,不能使用10块的钱币
if dp[i-coins[j]]+1<dp[i]:
#dp[i]=min(dp[i],dp[i-coins[j]]+1)
dp[i]=dp[i-coins[j]
Python动态规划解决找零问题

博客探讨了如何使用Python的动态规划方法解决找零问题。给定的钱币面额为[1, 2, 5, 7, 10],目标是找出找零最小钱币数量的解决方案。通过问题分解和状态初始化,实现动态规划算法来找到最优解。"
118407134,10974010,Python 迭代器详解,"['Python', '编程概念']
最低0.47元/天 解锁文章
7902





