动态规划——最少硬币找零问题(python)
1. 问题描述
2. 思路
刚开始是想利用贪心算法。假如要找的零钱总额为49元,先找10块的,可以找40块,再继续找5块的,可以找5块,再继续找2块的,可以找4块。找够49元的最少纸币数为4 + 1 + 2 = 7。但是有些情况可能不太行,例如:有纸币1元、3元、4元,要找6元的零钱,如果按照贪心算法的话,是找一张4元和两张1元,一共3张纸币。但是找6块钱的话,最少的方法应该是找两张3块。因此贪心算法在这里是失效的。
进一步,可以利用动态规划的算法来进行求解:
2.1 动态规划
通过这个递归公式我们可以进行填表。表格的初始化方式不太一样。我们以三种纸币1、3、4,找6块钱的零钱为例。由于表的第一行表示用面额为0的纸币找钱,那么找任意数量的钱,都需要无穷多的纸币,因此标的第一行初始化为python能够支持的最大数。第一列表示需要找0块钱(不需要找钱),用什么面额的钱找,都只需要0张,因此除了第一格,第一列统一初始化为0。表中的其他初始化为0。
2.2 python代码
import sys
max = sys.maxsize
def giveChange(coinList,totalCoin):result = [[0 for i in range(totalCoin + 1)] for j in range(len(coinList) + 1)]for j in range(totalCoin+1):result[0][j] = maxfor i in range(1,len(coinList)+1):for j in range(1,totalCoin + 1):if j >= coinList[i-1]:result[i][j] = min(result[i - 1][j], result[i][j - coinList[i - 1]]+1)else:result[i][j] = result[i-1][j]return result,result[i][j]
print(giveChange([1,3,4],6))
# 运行结果:
([[9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807, 9223372036854775807],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 1, 2, 3, 2],
[0, 1, 2, 1, 1, 2, 2]],2)
最后找6块钱用的最少的纸币数是2张。
动态规划——最少硬币找零问题(python)相关推荐
- java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现
硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...
- 最少硬币找零问题(js实现)
最少硬币找零问题 例如,有以下面额(硬币):1,5,10,5. 如果要找36的零钱,我们可以用1个25的硬币.1个10的硬币和1个1的硬币. 如何将这个解答转化成算法? 今天我们只要采用两种方法来解决 ...
- 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)
背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...
- 动态规划实战--硬币找零问题
上一篇文章上提到硬币找零的例子,现在我们实战动态规划就从硬币找零开始 问题描述: 给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], - c[n],同时还有一个总金额 k,编写一 ...
- 动态规划解决硬币找零问题
题目描述:给定不同面额的硬币 coins 和一个需要找零的金额 n.编写一个函数来计算可以凑成金额n所需的最少的硬币个数.并求出所需硬币的所有面额并输出.(硬币可重复多次使用) 动态规划算法通常用于求 ...
- javascript经典算法之最小硬币找零问题
前言 笔者之前也断断续续写过几篇javascript数据结构和算法的文章,之所以要写,是因为它们很重要.在前端的职业生涯中我们会遇到很多选择,走向不同的方向,但是唯一不变的,就是技术思维. 而算法,正 ...
- Python 动态规划(DynamicProgramming)-硬币找零
动态规划(DynamicProgramming)-硬币找零 文章目录 动态规划(DynamicProgramming)-硬币找零 1.动态规划 a.什么是动态规划 b.适用对象 2.硬币找零-Codi ...
- 从自动贩卖机找零看Python中的动态规划问题
原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...
- 动态规划——硬币找零思路
找零的两种问题 硬币找零问题,有两种.一种用贪心解决,一种用动态规划解决. 问题1:假设我们有 v1,v2,--,vn(单位是元)这些币值的硬币,它们的张数分别是 c1.c2.-, cn.我们现在要用 ...
最新文章
- 人工智能之机器学习常见算法
- Python自动化3.0-------学习之路-------函数!
- python csv读取-Python对于CSV文件的读取与写入
- Safari调试iOS应用
- 基于Spring提供支持不同设备的页面
- python 运算符 (算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级)(与或非)(异或)
- 简易计算器 java_用Java做一个简易计算器,要用到哪些知识?
- c++面向对象高级编程 学习十四 引用
- nRF51822 硬件复位引脚
- zuul网关找不到服务_网关zuul中对所有下游服务权限做控制zuulauth
- linux中mtools工具_Linux中mtools命令起什么作用呢?
- centos7安装telnet服务
- java 面试常问问题
- 同一页面中加载两个相同的控件,结果只能出来一个,这是为什么
- 利用百度图像识别鉴定植物
- 惠普计算机工作站,HP 笔记本计算机和移动工作站电池安全召回和更换计划
- 大型网络之BGP路由通告路由传递配置
- Electron 远程控制
- 基于SSM的企业公司财务管理(javaweb-php-asp.netC#-j2ee)包含资产管理-凭证管理-出纳往来管理-年终资产数据统计分析
- 一不小心,登上支付宝开发者社区热文榜单Top3
热门文章
- 关闭电脑SSD的磁盘碎片整理
- seo和python_Seo技术篇之python
- LSU——1116 Necklace(尺取)
- qbuttongroup如何都不选中_将单选按钮和多选按钮分组的类QButtonGroup
- vue中打印插件vue-print-nb(一)——基本示例
- python语言和sql语言的区别_SQL和Python的集合操作对比:适合的就好!
- Android 低功耗蓝牙的多设备连接与数据接收,简单实现
- Swagger的配置教程(超级详细)
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day38】—— 实战那些事儿2
- 成都市武侯区计算机实验小学校长,成都武侯计算机实验小学在“博雅”文化沁润下绽放美丽花朵...