POJ: 2663 Tri tiling

POJ: 2663 Tri tiling

由于1*2的骨牌拼成区域的面积始终为2的倍数,而矩阵的面积为3*n
可以推断出,该矩阵必定由且仅由3*2,3*4,…3*n(n为偶数)的不可分割的小矩阵构成,比如:

这里写图片描述

如上所示,可以看出:
n=2时有三种状态;
n>=4(n=4的情况没列完)有2种不可分割的状态(|_ … _|或对称的情形)。
可以得到递推式如下,其中a[n]中存储3*n对应的结果,初始化a[0]=1,a[n]=0(n不为0):
则 a[n] =3a[n-2]+2a[n-4]+2a[n-6]+…
a[n-2]=3a[n-4]+2a[n-6]+2a[n-8]+…
a[n]= -a[n-2]+4a[n-2]+2a[n-4]+2a[n-6]+…
a[n]-a[n-2]=-a[n-2]+4a[n-2]+2a[n-4]-3a[n-4]
化简可得a[n]=4a[n-2]-a[n-4],可知需要设初值a[0]=1,a[2]=3,n从4开始时可利用递推式求解。

实现如下:

#include <stdio.h>  
int i = 4, n, a[31] = { 0 };
int main() {
for (a[0] = 1, a[2] = 3; i<31; ++i)
    a[i] = a[i - 2] * 4 - a[i - 4];
while (scanf("%d", &n), n>-1)
    printf("%d\n", a[n]);
system("pause");
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值