版权声明:如需转载,私聊博主 https://blog.csdn.net/lylzsx20172018/article/details/91048365
题目链接:https://cn.vjudge.net/contest/305330#problem/A
思路::
设:第n-2块有a种方法,第n-1块有b种方法(a<=b)
分情况:
(1)第n-2块和第n-1块的颜色相同 则—>a=b 则第n块有3a种方法
(2)第n-2块和第n-1块的颜色不同 则—>第n-2块有a种方法,第n-1块有b-a种方法 则第n块有2(b-a)种方法
根据(1)和(2)得出递推式:f(n)=2*f(n-1)+f(n-2);(不是单单根据一个就能得出)
代码1:
#include<cstdio>
#include<cstring>
int dfs(int n){
if(n==1)
return 3;
else if(n==2)
return 9;
else
return 2*dfs(n-1)+dfs(n-2);
}
int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
printf("%d\n",dfs(n));
}
return 0;
}
代码2:
#include<cstdio>
#include<cstring>
int main(){
int T,a[45],n;
scanf("%d",&T);
while(T--){
memset(a,0,sizeof(a));
a[1]=3,a[2]=9;
for(int i=3; i<45; i++)
a[i]=2*a[i-1]+a[i-2];
scanf("%d",&n);
printf("%d\n",a[n]);
}
return 0;
}