数楼梯(洛谷P1255)
题目描述
楼梯有 NN 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入
4
输出
5
高精度+斐波那契数列,因为数据范围给的是5000,long long存不下,就只能用高精度,数据范围不大,就用了递推
#include<bits/stdc++.h>
using namespace std;
typedef struct ty ty;
struct ty
{
vector<int> num;
}arr[50004];
vector<int> add(vector<int> a, vector<int> b)
{
vector<int> c;
if(a.size() < b.size())
{
return add(b, a);
}
int t = 0;
for(int i = 0; i < a.size(); i++)
{
t += a[i];
if(i < b.size())
{
t += b[i];
}
c.push_back(t%10);
t /= 10;
}
if(t)
{
c.push_back(1);
}
return c;
}
void prt(int n)
{
for(int i = arr[n].num.size()-1; i >= 0; i--)
{
cout << arr[n].num[i];
}
}
int main()
{
int n;
cin >> n;
arr[0].num.push_back(0);
arr[1].num.push_back(1);
arr[2].num.push_back(2);
if(n <= 2)
{
prt(n);
return 0;
}
for(int i = 3; i <= n; i++)
{
arr[i].num = add(arr[i-1].num, arr[i-2].num);
}
prt(n);
return 0;
}