思路:利用二维数组a【i】【j】来存储,其中i为斐波那契层数,j系列为结果
例题如下:
题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1复制
4
输出 #1复制
5
说明/提示
- 对于 60% 的数据,N≤50;
- 对于 100% 的数据,N≤5000。
#include<bits/stdc++.h>
using namespace std;
int n,len=1;
int aa[5005][5005];//aa[k][i]--第k阶台阶所对应的走法数
void hp(int k)//高精度加法,k来存阶数
{
int i;
for(i=1;i<=len;i++)
aa[k][i]= aa[k - 1][i] + aa[k - 2][i];//套用公式
for(i=1;i<=len;i++) //进位
if(aa[k][i] >= 10)
{
aa[k][i + 1]+= aa[k][i] / 10;
aa[k][i]= aa[k][i] % 10;
if(aa[k][len + 1])len++;
}
}
int main()
{
int i;
scanf("%d",&n);
aa[1][1]=1; aa[2][1]=2; //初始化
for(i=3;i<=n;i++) //从3开始避免越界
hp(i);
for(i=len;i>=1;i--) //逆序输出
printf("%d", aa[n][i]);
return 0;
}