杭电OJ2045
递推法 规律比较难找 没做出来 看的别人的思路
思路:分两种情况
-
第n-1个元素和第一个元素同色,则第n-2个元素和第一个元素肯定不同色(因为之前的序列都是合法的),那么最后一个元素有两种选法,则这种情况的数量为2*f(n-2)
-
第n-1个元素和第一个元素不同色,则最后一个格子只有一种选法,故这种情况数量为f(n-1)
故所有情况为二者之和
注意用Long Long 类型 递推容易溢出
#include<cstdio>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
long long a[51];
a[1]=3;
a[2]=6;
a[3]=6;
for(int i =4;i<51;i++){
a[i] = a[i-1]+a[i-2]*2;
}
printf("%lld\n",a[n]);
}
return 0;
}