http://acm.hdu.edu.cn/showproblem.php?pid=2501

题解:递推

dp[i+2]=dp[i+1]+2*dp[i]

dp[i+2]相对于dp[i]正好多一个2x2的正方形,当前 i+1 个格子都填满后,则第i+2 个格子就确定了,而当前i个 都填满后,为了不与i+1 个格子都填满的方案重复,则还有两种方案可选,直接填2x2或填两个1x2(横着填)

#include <iostream>
#include <stdio.h>

using namespace std;
int n,t;
int dp[45];
int main()
{   dp[0]=1;
    dp[1]=1;
    dp[2]=3;
        for(int i=3;i<=40;i++){
            dp[i]=dp[i-1]+2*dp[i-2];
        }
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        printf("%d\n",dp[n]);

    }
    //cout << "Hello world!" << endl;
    return 0;
}