POJ 2663

解题 方法   因为只有  3  所以我列举了所有状态  000  111  001  100  110   011    每一层只有  6个状态;简化了 搜索的过程

链接   http://poj.org/problem?id=2663

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 int N,dp[33][8];
 8 int work( )
 9 {
10     memset(dp,0,sizeof(dp));
11     dp[0][2] = 1;
12     for( int i = 1; i <= N; i++ )
13     {
14         dp[i][1] = dp[i-1][2];
15         dp[i][2] = dp[i-1][1] + dp[i-1][3] + dp[i-1][4];
16         dp[i][3] = dp[i-1][2] + dp[i-1][5]  ;
17         dp[i][4] = dp[i-1][2] + dp[i-1][6];
18         dp[i][5] = dp[i-1][3];
19         dp[i][6] = dp[i-1][4];
20     }
21     return dp[N][2];
22 }
23 int main( )
24 {
25     while( scanf("%d",&N) && N >= 0 )
26     {
27         if( N*3%2 )printf("0\n");
28         else       printf("%d\n",work( ));
29     }
30     return 0;
31 }
原文地址:https://www.cnblogs.com/wulangzhou/p/3027124.html