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. 杭州"人才新政22条" 硕士来杭工作一次性补贴2万元

    转载自原文杭州"人才新政22条" 硕士来杭工作一次性补贴2万元 2016-11-8 继去年1月推出“人才新政27条”后,杭州在引才上又将有新动作.在昨天举行的2016浙江·杭州国际 ...

  2. wepy小程序实现选项卡

    先上效果: 本文是基于前面几篇文章: 使用wepy开发微信小程序商城第一篇:项目初始化 使用wepy开发微信小程序商城第二篇:路由配置和页面结构 使用wepy开发微信小程序商城第三篇:购物车(布局篇) ...

  3. 【SPOJ 694】Distinct Substrings (更直接的求法)

    [链接]h在这里写链接 [题意] 接上一篇文章 [题解] 一个字符串所有不同的子串的个数=∑(len-sa[i]-height[i]) [错的次数] 0 [反思] 在这了写反思 [代码] #inclu ...

  4. Spring Boot系列二 Spring @Async异步线程池用法总结

    1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncT ...

  5. 微服务API模拟框架frock介绍

    本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2016/02/introducing-frock Urban Airship是一家帮助 ...

  6. php 修改文件内容,替换指定内容

    $f='./test.txt'; file_put_contents($f,str_replace('{{modulename}}','Hospital',file_get_contents($f)) ...

  7. bc -l 对于 %取模计算出错

    https://yq.aliyun.com/articles/279384 expr % expr    The  result of the expression is the "rema ...

  8. Boost.Asio c++ 网络编程翻译(10)

    read/write方法 这些方法对一个流进行读写操作(能够是套接字,或者其它表现的像流的类): async_read(stream, buffer [, completion],handler):这 ...

  9. ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载

    一:NSURLSessionDownloadTask:实现文件下载:无法监听进度 #import "ViewController.h" @interface ViewControl ...

  10. Sift算子特征点提取、描述及匹配全流程解析

    Sift之前的江湖 在Sift横空出世之前,特征点检测与匹配江湖上占据霸主地位的是角点检测家族.先来探究一下角点家族不为人知的恩怨情仇. 角点家族的族长是Moravec在1977年提出的Moravec ...