假设有一个梯子,梯子有n层,每次可以爬1层或者2层,求有多少不同的爬梯方式。
1.优化子结构
如果g(n)为爬n阶的方法数,如果爬n层的时候最后达到第n层有两种方法,爬一层或者爬两层,如果爬一阶,其方法数是g(n-1),如果爬二阶,其方法数是g(n-2),即g(n) = g(n-1)+g(n-2).
证明:假设g(n-1)不是跳上前n-1阶的方法个数,这里设g’(n-1)>g(n-1),那爬到n阶的方法数记为g’(n)=g’(n-1)+g(n-2)>g(n-1)+g(n-2)=f(n),这和g(n)为爬到n阶的方法数相矛盾,所以假设不成立,g(n-1)为爬到n-1阶的方法数,同理可证g(n-2)成立
2.重叠性
g(n) = g(n-1)+g(n2)
g(n-1) = g(n-2)+g(n-3)
..............
3.状态转移矩阵
g(1) = 1;
g(2) = 2l
g(n) = g(n-1)+g(n-2) n>2
4.伪代码
g[0] = 1
g[1] =1
for i=2 to n
g[i] = g[i-2]+g[i-1]
return g[n]
时间复杂度:O(n)