P1255 数楼梯
这题高精度+递归
递归是看出来了,但是没想到斐波拉契数列,超时了
要么走一步要么走两步,只考虑最后一步,可以得到a[i] = a[i-1] + a[i-2]
#include<iostream>
using namespace std;
long long n,sum;
int a[5009][5009];
int add_n(int x,int k) //高精度加法
{
int len = k+1;
for(int i=1;i<=len;i++)
{
a[x][i] += (a[x-1][i] + a[x-2][i]);
a[x][i+1] += a[x][i]/10; //先进位
a[x][i] %= 10; //再取余
}
while(a[x][len]==0) len --;
return len;
}
int main()
{
cin>>n;
a[1][1] = 1; //初始化
a[2][1] = 2;
int k = 1;
for(int i=3;i<=n;i++)
{
//a[i] = a[i-1] + a[i-2]
k = add_n(i,k+1);
}
for(int i=k;i>=1;i--) //反过来输出
cout<<a[n][i];
return 0;
}
好菜,连这都看不出来,算了,积累经验吧,记住记住,加油加油