题目描述
楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
说明
(60% N<=50 ,100% N<=5000)
题目解析
这边特意将题目中的数据规模写出来,对于60%的数据是小于50,但是对于100%的数据是小于5000,这边就是考虑到C++中的unsigned long long 是否可以存储这个大的数据量了,显然是存不了的,所以在这边我们需要用到高精度加法(使用python和java的忽略这个问题,java有大整数,python无视存储位数)
首先这道题扫一遍就知道是斐波那契数列的解法,我们可以先找一下递推公式。
如果N=1,只有一种走法
如果N=2,由两种走法,分别是1,1、2
如果N=3,由三种走法,分别是1,1,1、1,2、2,1
如果N=4,由五种走法,分别是1,1,1,1、1,2,1、1,1,2、2,1,1,2,2
…
至此,可以得到递推公式为f[i] = f[i-1] + f[i-2]。
代码实现
#include <iostream>
#include <string>
#include <cstring>
#define maxn 5005
using namespace std;
int a[maxn],b[maxn],c[m