题意 : 中文题不解释。
思路 :先算了第3个第4个,算的时候发现只要在已经枚举出来的前边的状态中往后添加字母就行了,如果两个的都已经表示出来了,那第三个就可以在每个第二个后边加一个,在第一个后边加两个。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdio.h> #define LL __int64 LL a[51] ; void chart() { 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 ; } int main() { int n ; chart() ; while(~scanf("%d",&n)) { printf("%I64d ",a[n]) ; } return 0 ; }