博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tri Tiling
阅读量:6991 次
发布时间:2019-06-27

本文共 1196 字,大约阅读时间需要 3 分钟。

第一次写博客。

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
 
题目意思给你一个3*n矩形,用2*1的矩形将它填满,有多少种情况。
这是一题递推题,首先当n为奇数的时候,3*奇数=奇数,用2*1的矩形是怎样都填不下去的。
所以只要考虑n为偶数的情况。
设3*n时情况有a[n]种;
当n=2时,有以下三种情况:
 
当n>2时,
如果图形中不包含n=2时的三种情况的话,那么就只会有2种情况。
例如n=4:
将其反过来又是一种。
根据以上两种情况可以将长为n的矩形分两块:n-2+2;n-4+4;n-6+6……n-n+n;
①n-2+2的情况有a[n-2]*3;
②n-4+4的情况有a[n-4]*2;为什么这里是*2而不是*a[4]?因为4分成2与2的话会与②中的重复,所以只需考虑4中不能分成2与2情况
……
所以a[n]=a[n-2]*3+2*(a[n-4]+a[n-6]+……+a[n-(n-2)]+a[0](注意a[0]=1));
#include
int a[35]={
1,0,3};int f(int x){ int sum=0; for(int i=x;i>=0;i-=2) sum+=a[i]*2; return sum;}int main(){ int n; for(int i=4;i<=30;i+=2) { a[i]=a[i-2]*3+f(i-4); a[i-1]=0; } while(scanf("%d",&n)!=EOF) { if(n==-1) break; printf("%d\n",a[n]); }}

 

转载于:https://www.cnblogs.com/-yuxia/p/5268675.html

你可能感兴趣的文章
POJ 3126 Prime Path SPFA
查看>>
Shortest Path [3]
查看>>
离线情报分析工具CaseFile
查看>>
【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用
查看>>
05Hadoop-左外连接
查看>>
python3 识别图片文字
查看>>
文字在div中水平和垂直居中的的css样式
查看>>
cocos creator protobuf实践
查看>>
精品素材:推荐15套非常漂亮的 iOS 图标素材
查看>>
使用HttpSessionListener接口监听Session的创建和失效
查看>>
android 国际化
查看>>
10000单词积累,从今天开始(待续)。。。
查看>>
转Spring+Hibernate+EHcache配置(三)
查看>>
使用现有ECC数据库进行安装或者恢复系统
查看>>
发布我的高性能纯C#图像处理基本类,顺便也挑战一下极限。:)
查看>>
在Ubuntu上单机安装Hadoop
查看>>
安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法
查看>>
存储过程中执行动态Sql语句
查看>>
SQL Server里简单参数化的痛苦
查看>>
《逻辑与计算机设计基础(原书第5版)》——1.9 习题
查看>>