Tri Tiling

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 2118    Accepted Submission(s): 1211

Problem Description
In how many ways can you tile a 3xn rectangle with 2x1 dominoes? Here is a sample tiling of a 3x12 rectangle.




 
Input
Input consists of several test cases followed by a line containing -1. Each test case is a line containing an integer 0 ≤ n ≤ 30.

 
Output
For each test case, output one integer number giving the number of possible tilings.

 
Sample Input
2
8
12
-1
 
Sample Output
3
153
2131
 
Source
 
Recommend
Eddy   |   We have carefully selected several similar problems for you:  1133 1267 1207 1249 1284

转:::,假设n为奇数,必定无解。

当n为偶数时,一个比較直观的思路就是把大矩形用竖线切出左边一部分,然后递归求解,就像UVA_10359那样,直接考虑最左边一个小矩形是怎样构成的我们就能够递归得到f(n)递推式。

尽管这个题目乍看上去小矩形似乎拼法比較多,并且要拼出一个不能再用竖线切分的小矩形似乎拼的方法也并不直观。但假设我们在纸上多画一画的话,对于拼随意一个横向边长为x的不可再用竖线切分的小矩形,假设x为2,显然有3种拼法,假设x为大于2的偶数,那么仅仅有2种拼法。

至于假设x>2为什么仅仅有两种拼法,我们最好还是实际拼一下。首先第一列肯定仅仅有两种情况,第一种是一个横的在上面,然后一个竖的在左下方,另外一种是一个横的在以下,然后一个竖的在左上方,由于两种情况对称,我们仅仅讨论第一种情况。

如今已经拼好两个了,假设横的以下再放一个竖的,那么显然这个就成了一个x=2的小矩形了,那么最后拼出来的就不符合我们前面说的不可再用竖线切分的特征了,因此横的以下也即竖的右边,仅仅能再放两个横的,放完两个横的我们就发现两个横的上面有一个小正方形区域,这个区域仅仅能楔进去一个横的,等把这个横的画完之后,MyGod,我们会发现一个惊人的事实,如今的这个结构是和我们最初放完一个横的一个竖的的那种情况的结构是一样的!因此,假设我们想继续向右拼出不能被竖线切分的矩形,那么仅仅能是反复之前的操作,因而得到的最后横向边长为x的矩形是唯一确定的。

前面我们最初拼的时候仅仅取了对称的两种情况之中的一个,因此,假设x>2,拼出一个不能被竖线分割的矩形的方法仅仅有两种。

那么递推公式自然就有了,f(n)=3*f(n-2)+2*f(n-4)+…+2*f(0),然后再写出f(n-2)的递推式后两式作差就能够得到f(n)=4*f(n-2)-f(n-4),递归的边界是f(0)=1,f(2)=4。

代码:0MS

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
#define M 31
int f[M]={1,3};
int main()
{
int
i,n;
for(
i=2;i<M;i++) f[i]=4*f[i-1]-f[i-2];
while(
cin>>n)
{
if(
n<0) break;
if(
n%2==0) cout<<f[n/2]<<endl;
else
cout<<0<<endl;
}
return
0;
}

HDU 1143 Tri Tiling (递推)的更多相关文章

  1. HDU 1143 Tri Tiling

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=1143 Tri Tiling Time Limit: 2000/1000 MS (Java/Others) ...

  2. HDU 1143 Tri Tiling(递归)

    意甲冠军:一些现有的1*2小盒子.求拼3*n多少个长方形的拼写. 思考: 因为它是一个递归式.肯定会遇到层的关系.仔细观察,研究发现,每层应设置2一层.(奇数层不能是矩形)而从显卡好最后一层的最后一战 ...

  3. HDU 1143 Tri Tiling 递归问题

    将一个3*n的矩形用1*2的矩形填充,n为奇数时一定不能被填满,n*3%2==1 接下来处理这个问题我们要从简单的情况开始考虑,所谓递归就是要能将问题的规模不断减小,通过小问题的解决最后将复杂问题解决 ...

  4. HDU 2085 核反应堆 --- 简单递推

    HDU 2085 核反应堆 /* HDU 2085 核反应堆 --- 简单递推 */ #include <cstdio> ; long long a[N], b[N]; //a表示高能质点 ...

  5. HDU 5860 Death Sequence(递推)

    HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...

  6. hdu 2604 Queuing(dp递推)

    昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...

  7. PKU 2506 Tiling(递推+高精度||string应用)

    题目大意:原题链接有2×1和2×2两种规格的地板,现要拼2×n的形状,共有多少种情况,首先要做这道题目要先对递推有一定的了解.解题思路:1.假设我们已经铺好了2×(n-1)的情形,则要铺到2×n则只能 ...

  8. HDU 2154 跳舞毯 | DP | 递推 | 规律

    Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是 ...

  9. HDU - 3336 next运用+递推

    题目的匹配应该也要看成一个文本串与另一个模式串的匹配过程 Text是以当前i结尾的后缀来匹配Pattern的前缀(非真) 这里的Pattern肯定是可以匹配成功的,直接由next来保证(next总是当 ...

随机推荐

  1. spark源码解析之scala基本语法

    1. scala初识 spark由scala编写,要解析scala,首先要对scala有基本的了解. 1.1 class vs object A class is a blueprint for ob ...

  2. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...

  3. jquery-validate使用.md

    html <form id="s_form" class="form-horizontal" action="http://www.baidu. ...

  4. MySQL的安装及使用教程

    MySQL的安装及使用教程 一.  MySQL的下载及安装 首先登陆MySQL的官网,选择Downloads→Windows→MySQL Installer→Windows(x86,32-bit),M ...

  5. C++学习笔记(达内视频版)

    达内C++(陈宗权主讲) 第一天: 课程分为Core C++(标准C++.不依赖操作系统)和Unix C++. 1.配置bash,运行.sh文件. vi bash_profile 在"pat ...

  6. Oracle学习(六):子查询

    1.知识点:能够对比以下的录屏进行阅读 SQL> --子查询所要解决的问题:问题不能一步求解 SQL> --查询工资比SCOTT高的员工信息 SQL> --(1)使用普通方法 SQL ...

  7. swift学习:自定义Log

    import UIKit /* 总结:1:let file = (#file as NSString).lastPathComponent,#file获取的是打印所在的文件 的全路径,转成NSStri ...

  8. 排查一般MySQL性能问题

    排查一般MySQL性能问题,通常要记录下面几项信息: 1.mysql> show processlist; 2.mysql> show engine innodb status\G 3.表 ...

  9. object.create(null) 和 {}创建对象的区别

    原文 简书原文:https://www.jianshu.com/p/43ce4d7d6151 创建对象的方法 如果要创建一个空的对象,可以使用如下的三种方法 var obj1 = {}; var ob ...

  10. ajax实现注册用户名时动态显示用户名是否已经被注册(1、ajax可以实现我们常见的注册用户名动态判断)(2、jquery里面的ajax也是类似我们这样封装了的函数)

    ajax实现注册用户名时动态显示用户名是否已经被注册(1.ajax可以实现我们常见的注册用户名动态判断)(2.jquery里面的ajax也是类似我们这样封装了的函数) 一.总结 1.ajax可以实现我 ...