Tiling
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7487   Accepted: 3661

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

Source

解题思路:

有两种长方形, 1*2 (长1。高2),  2*2   .给定一块 n*2的大长方形,问用两种规格的长方形把它铺满,一共同拥有多少种方法。

如果已经求得了 长度为n-1 的方法数。那么要铺满n,仅仅有一种方法。用1*2

如果已经求得了 长度为n-2 的方法数,那么要铺满n。有三种方法

可是第三种会跟已经求得了长度为n-1的方法数的情况反复,去掉。

所以求得的递推方程为   f [0] =1   f[1] = 1    f[2] =3     f[n]= f[n-2]*2 + f[n-1]

须要注意的是本题用到了大数。

代码:

#include <iostream>
#include <string.h>
using namespace std;
string s1,s2;
int a[1000],b[1000],c[1000];//a,b保存两个字符串得到的大数。c保存a,b相加以后得到的大数
string f[300]; string add(string s1,string s2) //将大数s1,s2相加。并返回字符串类型的结果
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
string result;
int lena=s1.length();
int lenb=s2.length();
int k=0;
for(int i=lena-1;i>=0;i--)
a[k++]=s1[i]-'0';
k=0;
for(int j=lenb-1;j>=0;j--)
b[k++]=s2[j]-'0';
int len=lena>lenb? lena:lenb;
for(int i=0;i<len;i++)
{
c[i]+=a[i]+b[i];//注意是+=,还要考虑进位
if(c[i]>=10)
{
c[i+1]++;
c[i]-=10;
}
}
int i;
for( i=999;i>=0;i--)
if(c[i]!=0)
break;
for(;i>=0;i--)
result+=(char)(c[i]+'0');
return result;
} void get()
{
f[0]="1";
f[1]="1";
f[2]="3";
f[3]="5";
for(int i=4;i<=250;i++)
{
f[i]=add(f[i-2],f[i-2]);
f[i]=add(f[i],f[i-1]);
}
}
int main()
{
get();
int n;
while(cin>>n)
{
cout<<f[n]<<endl;
}
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

[ACM] POJ 2506 Tiling (递归,睑板)的更多相关文章

  1. poj 2506 Tiling(递推 大数)

    题目:http://poj.org/problem?id=2506 题解:f[n]=f[n-2]*2+f[n-1],主要是大数的相加; 以前做过了的 #include<stdio.h> # ...

  2. POJ 2506 Tiling(递推+大整数加法)

    http://poj.org/problem?id=2506 题意: 思路:递推.a[i]=a[i-1]+2*a[i-2]. 计算的时候是大整数加法.错了好久,忘记考虑1了...晕倒. #includ ...

  3. poj 2506 Tiling(java解法)

    题目链接:id=2506">http://poj.org/problem?id=2506 本题用的java解的.由于涉及到大数问题,假设对java中的大数操作不熟悉请点这儿:链接 思路 ...

  4. POJ 2506 Tiling (递推 + 大数加法模拟 )

    Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7965   Accepted: 3866 Descriptio ...

  5. poj 2506 Tiling 递推

    题目链接: http://poj.org/problem?id=2506 题目描述: 有2*1和2*2两种瓷片,问铺成2*n的图形有多少种方法? 解题思路: 利用递推思想,2*n可以由2*(n-1)的 ...

  6. POJ 2506 Tiling

    Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7437   Accepted: 3635 Descriptio ...

  7. poj 2506 Tiling(高精度)

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

  8. poj 2506 Tiling(大数+规律)

    poj2506Tiling 此题规律:A[0]=1;A[1]=1;A[2]=3;--A[n]=A[n-1]+2*A[n-2];用大数来写,AC代码: #include<stdio.h> # ...

  9. POJ 2506 Tiling dp+大数 水题

    大致题意:现有两种方块(1X2,2X2),方块数量无限制.问用这两种方块填满2Xn的矩阵的填法有多少种. 分析:通俗点说,找规律.专业化一点,动态规划. 状态d[i],表示宽度为i的填法个数. 状态转 ...

随机推荐

  1. C和指针 (pointers on C)——第十章:结构和联合(下一个)锻炼

    //1.本章只为了刷存在演习.. . typedef struct phone { char * quhao; char * jiaohuantai; char * zhanhaoma; }; typ ...

  2. 小丁带你走进git的世界三-撤销修改(转)

    一.撤销指令 git checkout还原工作区的功能 git reset  还原暂存区的功能 git clean  还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 g ...

  3. 怎么样CSDN Blog投机和增加流量?

    所谓推测装置,以提高它们的可见性,最近比较顾得上,这样一来打字游戏.一方面,练习打字速度 .在又一个方面中,以了解诱导的理论 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  4. MVC中的Views下面的视图放到Views文件夹外

    实战:把ASP.NET MVC中的Views下面的视图放到Views文件夹外   园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去 ...

  5. synchronized和进程间通信(转)

    关于JAVA多线程同步 JAVA多线程同步主要依赖于若干方法和关键字 1  wait方法: 该方法属于Object的方法,wait方法的作用是使得当前调用wait方法所在部分(代码块)的线程停止执行, ...

  6. HDU 3037 Saving Beans (Lucas法则)

    主题链接:pid=3037">http://acm.hdu.edu.cn/showproblem.php?pid=3037 推出公式为C(n + m, m) % p. 用Lucas定理 ...

  7. Web API之消息处理管道

    Web API之消息处理管道 前言 MVC有一套请求处理的机制,当然Web API也有自己的一套消息处理管道,该消息处理管道贯穿始终都是通过HttpMessageHandler来完成.我们知道请求信息 ...

  8. java处理Excel文件---excel文件的创建,删除,写入,读取

    这篇文章的代码是我封装的excel处理类,包含推断excel是否存在,表格索引是否存在,创建excel文件,删除excel文件,往excel中写入信息,从excel中读取数据. 尤其在写入与读取两个方 ...

  9. 【iOS开展-50】使用它来创建一个新的类的实现代码包,因此,不自觉地练习简单MVC实验,附带动画

    接下来说说代码封装最后一个个案. 最后一种情况看:[iOS开展-48]九宫格案例:自己主动布局.字典转模型运用.id和instancetype差别.xib反复视图运用及与nib关系 (1)代码封装的原 ...

  10. Android GPS获取当前经纬度坐标

    APP中可能会遇到一种需求,就是将当前所在位置的坐标传到server上,今天我提供三种途径去获取经纬度坐标信息,第一种是通过Android API来实现,另外一种通过百度地图API来实现,第三种通过天 ...