poj 2506 Tiling (递推)

http://poj.org/problem?id=2506



#include<stdio.h>

#include<string.h>

int a[260],b[260];

char str[260][260];

void add()

{

    int i,j,k;

    str[0][0]='1';//不要忘了0,我就贡献了一次wa

    str[0][1]='\0';

    str[1][0]='1';

    str[1][1]='\0';

    str[2][0]='3';

    str[2][1]='\0';

    for(i=3;i<=260;i++)

    {

        memset(a,0,sizeof(a));

        memset(b,0,sizeof(b));

        int len1=strlen(str[i-2]);

        for(k=len1-1,j=0;k>=0;k--,j++)

        {

            a[j]=str[i-2][k]-'0';

        }





        for(j=0;j<len1;j++)

        {

            a[j]=a[j]*2;



        }

        for(j=0;j<len1;j++)

        {

             a[j+1]+=a[j]/10;

            a[j]=a[j]%10;

        }



        int len2=strlen(str[i-1]);

        for(k=len2-1,j=0;k>=0;k--,j++)

        {

            b[j]=str[i-1][k]-'0';

        }



        for(j=0;j<=260;j++)

        {

            a[j]=a[j]+b[j];

        }

        for(j=0;j<=260;j++)

        {

            a[j+1]+=a[j]/10;

            a[j]=a[j]%10;

        }

        for(j=260;j>=0;j--)

        {

            if(a[j]!=0)break;

        }

        for(k=0;j>=0;j--,k++)

        {

            str[i][k]='0'+a[j];

        }

        str[i][k]='\0';



    }

}

int main()

{

    int n;

   add();



    while(scanf("%d",&n)!=EOF)

    {

        printf("%s\n",str[n]);

    }

}

  

你可能感兴趣的:(poj)