题目链接:Tiling UVA - 10359
题目大意:有1x2和2x2两种瓷砖,问有多少种方法可以将2xN的地面铺满。
递推关系:ans[i]=ans[i-1]+2*ans[i-2]
#include <stdio.h>
#include <string.h>
char s[251][101];
void setfib(void)
{
int i,j,len=1;
memset(s,'0',sizeof(s));
s[0][0]='1';
s[1][0]='1';
for(i=2;i<251;i++)
{
int carry=0,tem;
for(j=0;j<len;j++)
{
tem=2*(s[i-2][j]-'0')+(s[i-1][j]-'0')+carry;
carry=tem/10;
s[i][j]=tem%10+'0';
}
if(carry)
s[i][len++]=carry+'0';
}
}
int main(void)
{
int n;
setfib();
while(scanf("%d",&n)!=EOF)
{
int tem,i;
for(i=100;i>=0;i--)
if(s[n][i]!='0')
{
tem=i;
break;
}
for(i=tem;i>=0;i--)
printf("%c",s[n][i]);
printf("\n");
}
return 0;
}