是一道递推找规律的题,首先易知f(1)=3;f(2)=6;f(3)=6;f(4)=18;
现在考虑n>3的情况,若第n-1个格子和第一个格子不同,则为f(n-1);
若第n-1个格子和第1个格子相同,则第n-2个格子和第一个格子必然不同,此时为f(n-2)再乘第n个格子的颜色数,很显然第n个格子可以是第一个格子(也是第n-1个格子)的颜色外的另外两种,这样为2*f(n-2);
因此总的情况为f(n)=f(n-1)+2*f(n-2);
/**********************
* Author:fisty
* Data:2014-10-14
* 递推
* hdu 2045
*********************/
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int main(){
int n;
long long a[55] = {0,3,6,6};
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;
}