• poj 2506Tiling


    Description

    In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? 
    Here is a sample tiling of a 2x17 rectangle. 

    Input

    Input is a sequence of lines, each line containing an integer number 0 <= n <= 250.

    Output

    For each line of input, output one integer number in a separate line giving the number of possible tilings of a 2xn rectangle. 

    Sample Input

    2
    8
    12
    100
    200

    Sample Output

    3
    171
    2731
    845100400152152934331135470251
    1071292029505993517027974728227441735014801995855195223534251

    假设我们已经铺好了2*(n-1)的,要铺成2*n的只能用2*1的地板
    假设我们已经铺好了2*(n-2)的,要铺成2*n的可以用1个2*2的,也可以用两个2*1的
    所以得到递推公式f(n)=f(n-1)+2*f(n-2);
    根据题目的范围考虑用高精度模拟实现即可

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 char a[260][1000];
     4 void add(char b[],char c[],char d[])
     5 {
     6     int i,j,k=0,up=0;
     7     int x,y,z,t;
     8     i=strlen(b)-1,j=strlen(c)-1;
     9     while(i>=0||j>=0)
    10     {
    11         if(i<0) x=0;else x=b[i]-'0';
    12         if(j<0) y=0;else y=c[j]-'0';
    13         z=x+y+up;
    14         if(z>9)
    15         {
    16             up=1;
    17             z-=10;
    18         }
    19         else
    20             up=0;
    21         d[k++]=z+'0';
    22         i--,j--;
    23     }
    24     if(up)
    25         d[k++]='1';
    26     d[k]='\0';
    27     for(i=0;i<k/2;i++)
    28     {
    29         t=d[i];
    30         d[i]=d[k-i-1];
    31         d[k-i-1]=t;
    32     }
    33 }
    34 void init()
    35 {
    36     int i;
    37     char b[1000];
    38     strcpy(a[0],"1");
    39     strcpy(a[1],"1");
    40     for(i=2;i<=250;i++)
    41     {
    42         add(a[i-2],a[i-2],b);
    43         add(a[i-1],b,a[i]);
    44     }
    45 }
    46 
    47 int main()
    48 {
    49     init();
    50     int n;
    51     while(scanf("%d",&n)!=EOF)
    52     {
    53        printf("%s\n",a[n]);
    54     }
    55     return 0;
    56 }


  • 相关阅读:
    Wannafly挑战赛13 C:zzf的好矩阵(思维)
    Wannafly挑战赛13 B:Jxc军训(逆元)
    TZOJ 1221 Tempter of the Bone(回溯+剪枝)
    AtCoder Regular Contest 092 C
    TZOJ 3030 Courses(二分图匹配)
    TOJ 2778 数据结构练习题――分油问题(广搜和哈希)
    PAT L3-001 凑零钱(01背包dp记录路径)
    [HNOI2009]通往城堡之路
    [HNOI2006]潘多拉的宝盒
    [bzoj4361]isn
  • 原文地址:https://www.cnblogs.com/wilsonjuxta/p/2963695.html
Copyright © 2020-2023  润新知