HDU 1143 Tri Tiling

Tri Tiling

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2168    Accepted Submission(s): 1240


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
解题思路:求3*n的地板可以由1*2的木板无缝拼接的方案种数,首先n的奇数的时候肯定无法拼接,当n为偶数的时候,把整个看成f[i]由j*3和f[i-j]两部分组成,j*3的部分是不由2*3拼接而来的方案种数,j=2时仅有3种方案,j!=2时有2种方案
#include <cstdio>
int main()
{
    int f[31];
    int i,j;
    int n;


    f[0]=1;
    for(i=1;i<=30;i+=2)    f[i]=0;
    for(i=2;i<=30;i+=2)
    {
        f[i]=0;
        for(j=2;j<=i;j+=2)
        {
            if(j==2)    f[i]+=3*f[i-j];
            else        f[i]+=2*f[i-j];
        }
    }
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);

    while(scanf("%d",&n),n!=-1)    printf("%d\n",f[n]);
    return 0;
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值