用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 ",d[n]); } return 0; }