蓝桥杯培训第三讲 DP(硬币问题)

本文介绍了经典的硬币问题,分析了为什么贪心策略不适用于所有情况,并提出使用动态规划来解决小规模数据的问题。通过dp数组记录每种面值硬币组合的最小数量,公式表示为dp[n] = min(dp[n - 1], dp[n - 5], dp[n - 11]) + 1。" 136956718,1291052,FSK调制系统FPGA实现与MATLAB仿真对比,"['fpga开发', 'matlab', 'FSK调制系统', 'fpga和matlab联合开发']
摘要由CSDN通过智能技术生成

1.问题描述:
硬币问题是比较古老而又经典的问题,即给定需要凑的硬币,给定几种面值的硬币,问最少所需要的硬币个数凑成。
比如 给定15 硬币面值为1 ,5,11三个面值
即输入 15
输出为最少的硬币个数:3

2.算法分析:
其实硬币问题也可以算是贪心问题,比如给定面值为100 ,50,10,1的面值,我们给定
666,如果凑666的话,我们可以从大的凑,再从小的凑,比如
666 = 6 * 100 + 50 * 1 + 10 * 1 + 6 * 1 = (6 + 1 + 1 + 6) = 14
这样解即是最优解。
但是我们如果用这个贪心策略来解该问题的话,可能取不到想要的效果。
比如 15 = 11 * 1 + 1 * 4 = (1 + 4 = 5),但是这并不是最优的解,
比如15 = 5 * 3 = 3应该才是最优解。
所以,关于这个问题,其实对于数据规模大的时候我们采用贪心是没有错的,对于小规模数据我们使用DP来解,这是对于硬币问题最好的解决方式。
我们分析该怎么做呢。
其实我们不难发现我们每次考虑三种硬币即可,每次的选取应该是,
对于每个需要凑的硬币用dp数组来记录。dp[n]代表所需凑成n的最小硬币。
不难发现每个dp[n] 与 dp[n - 1],dp[n - 5],dp[n - 11]的关系:
dp[n] = min(dp[n - 1], dp[n - 5], dp[n - 11])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值