[PDP]瓷砖3 * N – LATGACH3 – M3TILE

主题: HTTP://vn.spoj.pl/problems/M3TILE/

算上由3XN长方形骨牌2铺平了道路。×1?

输入包含多个测试用例两端 -1.
每个测试用例是一个整数n, 0 ≤N≤ 30.
对于每个测试用例, 在整数是在一排的答案.
输入样例
2
8
12
-1
样本输出
3
153
2131
时间: 1s
注意: N = 0,则返回结果 1.

这篇文章是为奇N,1单元的数量×1 奇怪的是,当你domio 2 伞, 它们的总和始终是偶数, 其结果是该问题的回报 0 没有办法把合适. 因此,我们只考虑n为偶数.
首先考虑的矩形3×2, 很容易发现 3 配售

在接下来的3矩形×4, 3 X 3 = 9 从 + 2 A => 11 从

在接下来的3矩形×6, 我们有以下的情况下:

如果调用F(到) 为矩形3xk的切片,我们有:
˚F(6) = F(2) * ˚F(6-2) + 2*[ ˚F(6-4) + ˚F(6-6) ] = 3*11 + 2*(3+1) = 41 从.
一般有:
˚F(到) = 3 *˚F(K-2) + 2*[ ˚F(K-4) + ˚F(K-6) + .. + ˚F(0) ]
=> ˚F(到) + ˚F(K-4) = 3 *˚F(K-2) + 3*˚F(K-4) + 2*[ ˚F(K-6) + ˚F(K-8) + .. + ˚F(0) ]
=> ˚F(到) + ˚F(K-4) = 3 *˚F(K-2) + ˚F(K-2) = 4 *˚F(K-2)
=> ˚F(到) = 4 *˚F(K-2) – ˚F(K-4)
因此,我们已发现下式的检索简述如下:
˚F(到) = 4 *˚F(K-2) – ˚F(K-4) 和f(0) = 1, ˚F(2) = 3
˚F(ñ) 是一个解决问题的办法. 安装以下 (时间: 0.01s 🙂 )

#include<stdio.h>
int main()
{
    int n,i;
    int f[31]={0};
    f[0]=1;
    f[1]=0;
    f[2]=3;
    f[4]=11;
    for(i=6;i<=30;i+=2)
       f[i]=4*f[i-2] - f[i-4];
    scanf("%d",&n);
    while(n!=-1)
    {
       printf("%dn",f[n]);
       scanf("%d",&n);
    }
    return 0;
}