python 找零问题 动态规划
题目描述:
现有的钱币: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]]+1#记录使用的钱币new_coin=coins[j]coins_used[i]=new_coinif dp[change]>change:#无解的情况,初始化的时候设置dp[change]=change+1return -1else:return dp[change]
def used_coins(change,used_coins):'''利用used_coins求解使用的钱币'''re=[]while change:#dp[i]=dp[i-coins[j]]+1 used_coins[change]=coins[j]tmp=used_coins[change]re.append(tmp)change-=tmpreturn reif __name__=='__main__':#初始化coins=[1,2,5,7,10]change=16dp=[change+1]*(change+1)dp[0]=0coins_used=[0]*(change+1)re=coin_change(coins,change,dp,coins_used)re_coins=used_coins(change,coins_used)print("找零{0}元需要{1}张钱币,分别是{2}".format(change,re,re_coins))
执行结果:
找零16元需要3张钱币,分别是[1, 5, 10]
python 找零问题 动态规划相关推荐
- python找零方案_从自动贩卖机找零看Python中的动态规划问题
原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...
- python找零_python 找零问题 动态规划
题目描述: 现有的钱币:coins=[1,2,5,7,10] 找零:change(假定为正整数) 求解:如何用最少的钱币进行找零 分析:可以使用动态规划 比如找零8元,可以将问题进行分解 dp[8]= ...
- python找零_用python实现零钱找零的三种方法
1.递归(recursion)def coins_changeREC(coin_values, change): """ 递归实现零钱找零 ""&qu ...
- python找零_【python算法书】硬币找零问题?
题目:窝窝要去商店买棒棒糖,她怎么样才能用最少个数的硬币买到心仪的糖果呢? 分析:找零问题的贪心算法求解.为了满足我们要用最少的硬币数量支付指定额度的金额这一要求,每次使用可选的最大金额付款符合一贯& ...
- 钱币找零问题 - 动态规划
先从一个题目引出动态规划. 有数组 penny,penny 中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,给定一个整数 N 表示货币总数,再给定一个整数 aim ...
- python找零_Python 找零问题
#coding = utf-8 def Change_Money(money): print('总金额:'+str(money)+'元') loop=True tmp=[] # 面值列表 单位:元 t ...
- 从自动贩卖机找零看Python中的动态规划问题
原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...
- Python数据结构20:动态规划:找零兑换问题的动态规划解法并显示使用的硬币组合
在我们使用递归算法时,可能会出现规模庞大的重复计算,用一个中间表记录每个计算过的最优解法,就可以避免大量的重复计算.中间结果记录可以很好解决找零兑换问题.实际上,这种方法还不能称为动态规划,而是叫做& ...
- python 最小硬币数_Python之动态规划(最少硬币数找零)
完整代码: # 动态规划最少硬币数找零 def dpMakeChange(coinValueList, change, minCoins, coinsUsed): for cents in range ...
最新文章
- anaconda更换镜像源
- 20万Star的编程学习教程:让你的编码之路事半功倍!
- SEO站内优化系列讲座(八)——
- nodejs 获取post数据
- 核心概念——节点分组 Group
- Quartus II 8.1 详解--有图---图片详解 【1讲】
- 笔记10:时时屏幕抓取小程序
- 1.9编程基础之顺序查找02:输出最高分数的学生姓名
- React Native – 使用 JavaScript 开发原生应用
- 软件技术论坛_NASAC 2019技术论坛: 系统软件构造与验证技术
- 工作流的大致开发流程
- tenda无线网卡Linux驱动,腾达(Tenda)W311MI V2.0网卡驱动(LINUX)
- [渝粤教育] 中国地质大学 信息检索 复习题 (2)
- 比想像力更难的,是按自己的价值观行动的勇气
- 很多次游戏的最后取胜实际上都有很强的偶然性
- 提高生活、学习、工作效率的方法——时间管理Vs个人管理
- windows 挂载百度网盘/阿里云盘等(网盘变本地硬盘) alist + raidrive
- mysql pdo 端口_链接Mysql的api mysqli和pdo
- 图片数据的基本预处理与数据增强
- js内置对象Date
热门文章
- UnboundLocalError: local variable ‘Num_fSu‘ referenced before assignment
- 【阶段总结】大四上学期总结
- Linux自定义日志文件设置回滚(避免信息溢出)
- 空白脂质体冻干粉制备以及荧光素修饰空白脂质体的应用
- 小红书接口加密参数X-sign
- 协众信息技术平面海报设计,你知道多少
- spring(一)依赖注入与 SPEL
- 监听支付宝、微信 二合一 个人免签最新,运行起来之后无需人工操作,绕过验证码
- LED小间距屏幕理解
- 此windows不是正版