n 为奇数 0
n为偶数, dp[2]=3;
令dp[0]=1; dp[1]=0; dp[3]=0;
递推发现:其实我并没有发现,都是人家发现的 汗……
如果最后两列拼满 则为dp[n-2]*dp[2]=dp[n-2]*3
;
如果最后两列拼不满一定是最后四列拼满的,两列拼不满有2中拼法
我看不懂啊, 不说了,反正最后就是得到一个通项公式
dp[i]=4*dp[i-2]-dp[i-4];
参考博客:
http://blog.csdn.net/liwen_7/article/details/7998930
http://www.cnblogs.com/slgkaifa/p/7093245.html
AC 代码
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
int dp[31];
//dp[0]=1;
// dp[1]=0; // if i%2==1 0
// dp[2]=3;
dp[0]=1;
dp[1]=0;
dp[2]=3;
dp[3]=0;
for(int i=4;i<31;i++){
dp[i]=4*dp[i-2]-dp[i-4];
}
int ans=0;
while(scanf("%d",&n)){
if(n==-1) break;
printf("%d\n",dp[n]);
}
return 0;
}