#include<stdio.h>
#include<string.h>
int main()
{
int t,i,j,len;
char s[300];
int a[300][105]={0};
scanf("%d",&t);
a[1][1]=1;a[2][1]=2;
for(i=3;i<=200;i++)
{
for(j=1;j<=100;j++)
{
a[i][j]+=a[i-1][j]+a[i-2][j];
a[i][j+1]+=a[i][j]/1000;
a[i][j]=a[i][j]%1000;
}
}
while(t--)
{
scanf("%s",s);
len=strlen(s);
for(i=100;i>=1;i--)
if(a[len][i]!=0)
{
printf("%d",a[len][i]);
break;
}
for(j=i-1;j>=1;j--)
printf("%03d",a[len][j]);
printf("\n");
}
return 0;
}
简单递推+大数。
ans[n]=ans[n-1]+ans[n-2]。
由于数字只有'1'和'2'这两种,那么当让第n
位为1的时候,ans[n]加上ans[n-1];当让最后两位
合并成2的时候,ans[n]加上ans[n-2](因为要保证
倒数第二位一定是1)。
算出来的ans就是一个斐波那契数列。
hdu 1865
最新推荐文章于 2018-11-18 15:50:20 发布