UVa:10359 Tiling

来源:互联网 发布:淘宝滞销率 编辑:程序博客网 时间:2024/06/07 08:00

可以推出f[i]=f[i-1]+2*f[i-2]

需要用到大数加法。

#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 105using namespace std;void BigAdd(char a[],char b[],char back[]){    int p=0,up=0;    char c[MAXN]= {0};    for(int i=strlen(a)-1,j=strlen(b)-1; i>=0||j>=0; --i,--j)    {        int x,y,z;        if(i<0) x=0;        else x=a[i]-'0';        if(j<0) y=0;        else y=b[j]-'0';        z=x+y+up;        if(z>9) up=1;        else up=0;        c[p++]=z%10+'0';    }    if(up) c[p++]='1';    c[p]=0;    int q=0;    for(int i=p-1; i>=0; --i)        back[q++]=c[i];    back[q]=0;}char f[255][MAXN];int main(){    strcpy(f[0],"1");    strcpy(f[1],"1");    for(int i=2; i<=250; ++i)    {        char tmp[MAXN];        BigAdd(f[i-2],f[i-2],tmp);        BigAdd(f[i-1],tmp,f[i]);    }    int n;    while(scanf("%d",&n)!=EOF)        printf("%s\n",f[n]);    return 0;}


 

原创粉丝点击