SPOJ 3883. LATGACH3/ UVA 10918

用1*2的方块去覆盖3*n的方块

http://www.cnblogs.com/staginner/archive/2011/12/16/2290020.html

玉斌大神的题解

其实我昨晚想得跟斌神差不多,先是3*f[n-2],而且跨方块的有两种 所以要+2*f[n-4],但是没有继续考虑跨3方块 4方块的情况,其实多画一下,发现情况是一样的,一样是要*2f[n-2*k]

于是最后的递推方程就是 f[n]=3*f[n-2]+2*f[n-3]...+2*f[0];

#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
ll d[35];
void init()
{
    d[0]=1;
    d[2]=3;
    for (int i=4;i<=34;i+=2)
    {
        d[i]=4*d[i-2]-d[i-4];
    }
}
int main()
{
    init();
    int n;
    while (scanf("%d",&n))
    {
        if (n<0) break;
        printf("%lld\n",d[n]);
    }
    return 0;
}

 

posted @ 2013-12-03 11:26  KRisen  阅读(245)  评论(0编辑  收藏  举报