图中如果n-1的颜色和第一个的颜色不同,那么最后一个格子有1种涂色的方法 也就是 a(n-1)
如果n-1的颜色和第一个的颜色相同,那么最后一个格子有2种涂色的方法 也就是 2*a(n-2)
通过树形图可以看出,对于本题,要分不同的情况讨论n=1,n=2,(n=3,n>=4)。
n=1时
三种填涂方法
n=2时
左面三种,右边有对应的两种填涂方法,一共6种填涂方法
n=3时
有6种填涂方法
n>=4时
An=2*An-2+An-1
要注意a[n]的数据类型,不然会爆。
#include<stdio.h>
long long int a[60];
int main()
{
int N;
a[1]=3;
a[2]=a[3]=6;
for(int i=4;i<55;++i)
{
a[i]=2*a[i-2]+a[i-1];
}
while(~scanf("%d",&N))
{
if(N==1) printf("3\n");
else if(N==2) printf("6\n");
else if(N>=3)
{
printf("%lld\n",a[N]);
}
}
return 0;
}
那么如果说颜色不是三个
m表示色的种数,an是方案数
an=(m-2)*a(n-1)+(m-1)*a(n-2)