码迷,mamicode.com
首页 > 其他好文 > 详细

Tiling

时间:2018-12-09 23:02:47      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:ongl   数列   重点   算数   二位数组   数据   另一个   计算   lin   

openjudge上的一道题,在这里将高精度和递归递推巧妙的结合在了一起

Tiling

In how many ways can you tile a 2 × n rectangle by 2 × 1 or 2 × 2 tiles?

Here is a sample tiling of a 2 × 17 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 2 × n rectangle.

Sample Input

2

8

12

100

200

Sample Output

3

171

2731

845100400152152934331135470251

1071292029505993517027974728227441735014801995855195223534251

本题的递推公式很容易得到a[i]+=a[i-1]+a[i-2]*2

那么重点便集中在了如何用高精度来计算数列200多位的数据上?不用指望longlong,它也救不了你。

其实高精度的宗旨就是用数组记录,用进位来更改数据,所以既然我们在计算a[i]时还需要计算a[i-2],那么用一维数组是一定解决不了问题的,所以我们需要用上二位数组

到了这里,这道题的核心内容就讲完了(PS:1.由于代码原因,需要逆向输出,这只是个人习惯,正向输出也没问题,只不过读取长度时还需多费心思   2.注意代码的另一个巧妙之处,读取int类型数组长度,这个很常用)

附上本题代码

 1 #include<cstring>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 int len[255],a[255][305],n,k;
 6 int main()
 7 {
 8     memset(a,0,sizeof(a));
 9     memset(len,1,sizeof(len));
10     a[0][1]=1;
11     a[1][1]=1;
12     for(int i=2; i<=250; i++)
13     {
14         for(int j=1; j<=300; j++)
15         {
16             a[i][j]+=a[i-1][j]+a[i-2][j]*2;
17             if(a[i][j]>=10)
18                 a[i][j+1]=a[i][j]/10,a[i][j]%=10;
19         }
20         for(k=300; k>=1; k--)
21             if(a[i][k]>0)
22                 break;
23         len[i]=k;
24     }
25     while(scanf("%d",&n)!=EOF)
26     {
27         if(n>1)
28         {
29             for(int i=len[n]; i>=1; i--)
30                 printf("%d",a[n][i]);
31             printf("\n");
32         }
33         else
34             printf("1\n");
35     }
36     return 0;
37 }

 

Tiling

标签:ongl   数列   重点   算数   二位数组   数据   另一个   计算   lin   

原文地址:https://www.cnblogs.com/yufenglin/p/10093908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!