银币组合算法分析
来源:互联网 发布:局域网传文件软件 编辑:程序博客网 时间:2024/06/07 02:28
[题目]有足够量的2分、5分、1分硬币,请问凑齐1元钱有多少种方法?
此题乍看上去,只会觉得完全无法入手,但是按照由简至繁的思路,我们可以先考虑极端简单的情况,假如把问题规模缩小成:有足够量的1分硬币,请问凑齐1分钱有多少种方法?毫无疑问,答案是1。
得到这一答案之后,我们可以略微扩大问题的规模: 有足够量的1分硬币,凑齐2分钱有多少种方法?凑齐n分钱有多少种方法?答案仍然是1
接下来,我们可以从另一个角度来扩大问题,有足够量的1分硬币和2分硬币,凑齐n分钱有多少种方法?这时我们手里已经有了有足够量的1分硬币,凑齐任意多钱都只有1种方法,那么只用1分钱凑齐n-2分钱,有1种方法,只用1分钱凑齐n-4分钱,有1种方法,只用1分钱凑齐n-6分钱,有1种方法......
而凑齐这些n-2、n-4、n-6这些钱数,各自补上2分钱,会产生一种新的凑齐n分钱的方法,这些方法的总数+1,就是用1分硬币和2分硬币,凑齐n分钱的方法数了。
在面试时,立刻采用这种思路是一种非常有益的尝试,解决小规模问题可以让你更加熟悉问题,并且慢慢发现问题的特性,最重要的是给你的面试官正面的信号——立即动手分析问题比皱眉冥思苦想看起来好得多。
对于此题而言,我们可以很快发现问题的规模有两个维度:用a1-ak种硬币和凑齐n分钱,所以我们可以记做P(k,n)。当我们发现递归公式 P(k,n) = P(k-1,n - ak) + P(k-1,n - 2*ak) + P(k-1,n - 3*ak) ... ... 时,这个问题已经是迎刃而解了
通常由简至繁的思路,用来解决动态规划问题是非常有效的,当积累了一定量简单问题的解的时候,往往通向更高一层问题的答案已经摆在眼前了。
- 银币组合算法分析
- 寻找假银币算法
- 八枚银币算法
- 算法思考---------八枚银币
- 每天一算法(八枚银币)
- 每日一算法:八枚银币
- 数据结构经典算法学习之八枚银币(简单决策树)
- 分治算法寻找假银币问题(六)
- 组合数学-换方算法分析
- 【算法复习四】计算复杂性与算法分析---组合数学知识汇总
- 组合算法的程序实现及分析比较
- 组合数算法分析 以10选4为例
- 组合算法
- 组合算法
- 组合算法
- 组合算法
- 组合算法
- 组合算法
- Arm设计思想与高效C编程
- Solve: no such file to load -- sqlite3/sqlite3_native (LoadError)
- 思科
- 中国民众如何在CCTV获得信息
- blog全面转到http://www.32yx.com
- 银币组合算法分析
- HtmlParser提取网页中的纯文本信息-java
- 【老公问...老婆答】变量类型一
- vb winsock 特殊字符接收和发送报文
- 【DOM与SAX】
- 生成模型和判别模型
- [推荐]Eclipse配色插件---Eclipse Color Theme,支持多种颜色配置
- jf
- poj 1338