这篇文章主要为大家展示了“Python如何实现硬币兑换问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现硬币兑换问题”这篇文章吧。
硬币兑换问题:
给定总金额为A的一张纸币,现要兑换成面额分别为a1,a2,....,an的硬币,且希望所得到的硬币个数最少。
# 动态规划思想 dp方程式如下 # dp[0] = 0 # dp[i] = min{dp[i - coins[j]] + 1}, 且 其中 i >= coins[j], 0 <= j < coins.length # 回溯法,输出可找的硬币方案 # path[i] 表示经过本次兑换后所剩下的面值,即 i - path[i] 可得到本次兑换的硬币值。 def changeCoins(coins, n): if n < 0: return None dp, path = [0] * (n+1), [0] * (n+1) # 初始化 for i in range(1, n+1): minNum = i # 初始化当前硬币最优值 for c in coins: # 扫描一遍硬币列表,选择一个最优值 if i >= c and minNum > dp[i-c]+1: minNum, path[i] = dp[i-c]+1, i - c dp[i] = minNum # 更新当前硬币最优值 print('最少硬币数:', dp[-1]) print('可找的硬币', end=': ') while path[n] != 0: print(n-path[n], end=' ') n = path[n] print(n, end=' ') if __name__ == '__main__': coins, n = [1, 4, 5], 22 # 输入可换的硬币种类,总金额n changeCoins(coins, n)
以上是“Python如何实现硬币兑换问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。