注意范围,来个简陋的高精度就行了。
#include<bits/stdc++.h>
using namespace std;
long long f[310][10010];
long long cnt[310];
inline void add(int x,int y,int z)
{
int m=max(cnt[y],cnt[z]);
for(int i=1;i<=m;++i)
{
f[x][i]+=f[y][i]+f[z][i];
if(f[x][i]>9)
{
f[x][i+1]+=f[x][i]/10;
f[x][i]%=10;
}
}
if(f[x][m+1]) cnt[x]=m+1;
else cnt[x]=m;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//reopen(".in","r",stdin);
//freopen(".out","w",stdout);
int n;
cin>>n;
//if(n==0) {cout<<0;return 0;}
n=n+1;
f[1][1]=f[2][1]=cnt[1]=cnt[2]=1;
for(int i=3;i<=n;++i)
add(i,i-1,i-2);
for(int i=cnt[n];i;--i)
{
cout<<f[n][i];
}
cout<<endl;
return 0;
}
/**************************************************************
Problem: 4562
User: contest21_42
Language: C++
Result: 正确
Time:3 ms
Memory:26424 kb
****************************************************************/



京公网安备 11010502036488号