http://acm.hdu.edu.cn/showproblem.php?pid=2045
#include<stdio.h>
int main(){
int n,i;
__int64 f[51];
f[1] = 3;
f[2] = 6;
f[3] = 6;
for(i = 4;i <= 50;i++)
{
f[i] = f[i-1]+f[i-2]*2;
}
while(scanf("%d",&n) == 1){
printf("%I64d\n",f[n]);
}
return 0;
}
若前n-1个方格合法,则第n个只有一种情况,若前n-1个方格不合法,添加一个后变成合法,即前n-2个方格是合法的,并且第n-1个方格和第一个颜色相同,此时,第n个有两种情况,所以可推出f[i] = f[i-1]+f[i-2]*2;
ps:若使用long long f[51],应使用G++