找零问题之动态规划法求解Python

本文介绍了使用动态规划法来解决找零问题,通过从小到大逐步递推找到最优解,避免了递归的复杂性。以找零17元为例,解释了如何在面值1, 5, 10, 25元中找到最少数量的纸币组合。通过维护一个列表存储每个值的找零数量最小值,并记录找零方案,从而实现高效求解。" 115450425,10811567,深入理解路由器:工作原理与路由表解析,"['网络', '路由器', '网络协议', '静态路由', '数据包转发']
摘要由CSDN通过智能技术生成

找零问题之动态规划法求解

递归是从后往前逐步判断求解,17元有哪个和哪个组成,而哪个又由–和--组成,其实除了递归求解,也可以换种思路,从前往后逐步递推。

从小到大都求出来最优解,逐步递推。而大的最优解一定包含某个小的最优解(注意是某一个,这个是不确定的,用反证法),如果不包含,那必定还有一个解,这个解和最优解一定有一个是最优的,无论哪个都把之前的前提能够推翻。

比如,找零17元,面值有1,5,10,25四种金额。和递归一样,只不过是从小到大逐步求解(可以看成是递归的非递归形式)。

先求出找零1元的最优解,即1张1元。然后是2元,2元是由1元的最优解组成2张2元的,以此类推,找零5元,此时5元的最优解即变成1张5元,5元则是由5元的最优解组成,然后是6元,1张1元和1张5元,6元是在5元的最优解的基础上求出。

**那么到底如何求解呢?和递归的思路一样,还是上面的例子,已知有面值金额的种类,那么,比如找零7元,因为目前可选的只有面值1元和5元找零,所以最优解一定是1元和找零6元的最优解,或者是5元和找零2元的最优解。**其实就是把当前能够用面值金额直接找零的都算一遍,进行对比找出最小的。

为了保存,用一个列表存储每个值的找零数量最小值,为了存储找零方案,记录当前找零所用到的面值,(找零子集不用记录,比如找零7元,可以直接记录5,此时就代表用一张面值为5元的纸币,然后再直

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值