http://acm.hdu.edu.cn/showproblem.php?pid=2045
a(1)=3;a(2)=6;a(3)=6;a(4)=18;
现在考虑n>3的情况,若第n-1个格子和第一个格子不同,则为a(n-1);
若第n-1个格子和第1个格子相同,则第n-2个格子和第一个格子必然不同,此时为a(n-2)再乘第n-1个格子的颜色数,很显然第n-1个格子可以是第一个格子(即第n-2个格子)的颜色外的另外两种,这样为2*a(n-2);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main()
{
__int64 a[55]={0,3,6,6};
int n;
for(int i=4;i<=55;++i)
a[i]=a[i-1]+2*a[i-2];
while(scanf("%d",&n)!=EOF)
printf("%I64d\n",a[n]);
return 0;
}