POJ: 2663 Tri tiling

来源:互联网 发布:二维码扫描软件ios 编辑:程序博客网 时间:2024/04/30 09:48

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