http://acm.hdu.edu.cn/showproblem.php?pid=2045
递推公式还是看的别人的。就几近发现我这么个僵硬的智商不足以独自想考出状态转移方程了。。无奈。
假设此状态的种数为f(n) □□□□ □ □ 当倒数第二个和第一个相同时,最后一个有两种涂法,固有f(n-2)*2种
当倒数第二个和第一个不同时,仅一种涂法,固有f(n-1)种。
#include <iostream>
using namespace std;
#define N 55
__int64 paint[N];
void init(){
int i;
paint[1]=3;
paint[2]=6;
paint[3]=6;
for (i=4;i<N;i++)
paint[i]=paint[i-1]+paint[i-2]*2;
}
int main(){
int n;
init();
while (scanf("%d",&n)!=EOF){
printf("%I64d\n",paint[n]);
}
return 0;
}