poj 2663 Tri Tiling(递推)


poj 2663 Tri Tiling


很明显若n为奇数肯定放不满(总面积为奇数而砖的面积为偶数)

所以可以将长度为2的面积(3*2)看做一个单位每次都增加这样一个单位(不可能增加奇数长度),这样一个单位单独放有3种方法,

然后考虑两个单位放在一起出现的放法,首先两个单位互不“干扰”就有3*3种,有砖横跨两个单位的只有2种那么就是3*3+2=11种,

然后继续放一个单位,先考虑之前部分(3*4)和新放的单位互不干扰,就有11*3种,然后考虑横跨的横跨两个单位的话那么这两个

单位就只有两种放法,然后乘上第一个没被横跨的单位即2*3=6种,横跨3个单位那么这三个单位就只有2种放发,总共3*11+2*3+2=41种

、、、、就这样递推下去

因为n奇数答案都为0

令n/=2

则有f(n)=3*f(n-1)+2*f(n-2)+2*f(n-3)+...+2*f(1)+2

化简下就是f(n)=4*f(n-1)-f(n-2)

#include<stdio.h>
#include<string.h>
#define MAXN 20
int ans[MAXN];
int main()
{
    ans[0]=1;//不懂这个数据想表达什么?为什么不是0?
    ans[1]=3,ans[2]=11;
    for(int i=3;i<=15;i++)
        ans[i]=ans[i-1]*4-ans[i-2];
    int n;
    while(scanf("%d",&n)!=EOF&&(n!=-1))
    {
        if(n%2) printf("0\n");
        else printf("%d\n",ans[n/2]);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值