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]);
    }
}

  

原文地址:https://www.cnblogs.com/acSzz/p/2367149.html