题目链接
题目描述
楼梯有 n n n 阶,上楼可以一步上一阶,也可以一步上二阶。
但不能连续三步都走两阶,计算走到第 n n n 阶共有多少种不同的走法。
输入格式
一行,一个数字,表示 n n n 。
输出格式
输出走楼梯的方式总数。
样例输入
6
样例输出
12
数据规模
保证 n ≤ 50 n \leq 50 n≤50。
看到这道题,第一反应应该是动态规划。(主要受到入门题“走楼梯”影响)但是这道题有不能连续三次爬两阶的限制,那么该怎么办呢?
我们可以设计状态 f i , j , k f_{i, j, k} fi,j,k ,表示当前在第 i i i 阶,上一次爬了 j j j 阶,上上次爬了 k k k 阶。其中 j , k ∈ [ 0 , 2 ] j, k \in [0, 2] j,k∈[0,2]。
这样状态转移就可以这样写:
// 使用刷表写的
for (int i = 0; i <= n; i ++ ) {
if (i == 1) f[i][1][0] = 1;
if (i == 2) f[i]