上台阶(初级)
有一楼梯共n级,刚开始时你在第0级,若每次只能跨上一级或二级,要走上第n级,共有多少走法?(练习题NYOJ76)
解决思路(一)
这道题呢 有两种思路 如果你经验丰富 一看就看出来是动态规划了 那么就好写了
我们来分析一下动态规划 首先 n=1 只有一种 n=2 有两种 这没有疑问
那么 我们假设n=10 现在设上到第九层的方法是F(9) 设上到第八层的方法是F(8)
F(9) 种方法和F(8)种方法 两者中一定没有重复的 因为它们的终点都不同
那么对于第九层来说 再走一步 就到达第十层 那么 我们有F(9)种方法到达第九层
每种方法再走一步就到十了 所以我们就有F(9)种到达第十层的方法了 同理
对于第八层来说 我们不能走一级到达9 因为这种情况已经包含在F(9)里面了(仔细想想)
所以只能走两级 到达十 那么就有F(8)种方法到达十了 而F(8) F(9)不重复 所以F(8)+F(9)种方法到达十
而再往前 7 6 5...这些都需要先经过8 9 才能到 所以都已经包含在F(8) F(9)里了
所以 最终结论就是 F(n)=F(n-1)+F(n-2) (n>2) F(1)=1 F(2)=2 ------也就是斐波那契数列
解决思路(二)
如果说你不知道上面的怎么分析,那么也不要紧,因为这个问题也不是特别复杂,n=3 n=4的情况我们是完全可以手算出来的,那么观察规律,很容易就发现这是斐波那契数列了,甚至算出n=3的情况就可以大胆的试斐波那契了。但是要注意下,斐波那契数列到三四十左右就爆long long了 。注意范围。
那么,既然找规律这么容易,那我们干嘛还要考虑上面说的动态规划解法呢?
其实呢,上面的动态规划思想很重要,一定要理解,因为题目是活的,我们一定要把原理理解透彻,学会举一反三
才可以更好的应对题目的变式。
上台阶(升级版)
题目
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级......它也可以跳上n级。此时一只青蛙跳上一个n级的台阶总共有多少种跳法?
解决思路
这下情况变得复杂了,你就不能用上边那个找规律的方法了。
根据上边刚才的分析,我们设跳到一级有F(1)种方法,跳到二级有F(2)种方法.....F(3)...F(4).....
F(1) ..F(2).. F(3).. F(4)...F(n) 这些方法是没有重复的 因为终点都不一样
而这次 青蛙一次最多可以跳n阶 所以不论当前处在哪一阶 他都可以一步到达n层
所以 青蛙处于1....2...3...4...n-1 时和第一个问题中处于8、9往10跳的情况是一样的
所以 我们得到式子 F(n)=F(n-1)+F(n-2)+F(n-3).......F(1)
而 F(n-1)=F(n-2)+F(n-3)+F(n-4).......F(1)
两式相减 F(n) - F(n-1)=F(n-1) --------->即F(n)=2*F(n-1) F(1)=1
得到式子答案就出来了,实际做题时候要注意范围和题目要求。