典型的环形染色问题
当染第n个的时候,如果第一个和第n-1个是颜色不同的,那么问题前面的n-1个即是规模为n-1的子问题,而第n个只有一种颜色可选(3-2)
当第1个和第n-1个相同颜色的时候,第n个有2种颜色可以选,而因为第n-2个,颜色与第1个不同,所以转化成规模为n-2的子问题
所以,可以推倒出:
f(n)=f(n-1)+2*f(n-2);
/*HDOJ2045
作者:陈佳润
2013-04-08
*/
#include <stdio.h>
int i,n;
__int64 s[60];
void num()
{
s[0]=3,s[1]=3,s[2]=6,s[3]=6;
for(i=4;i<=50;i++)
{
s[i]=2*s[i-2]+s[i-1];
printf("%I64d\n",s[i]);
}
}
int main()
{
num();
while(~scanf("%d",&n))
{
printf("%I64d\n",s[n]);
}
return 0;
}