题解:dfs打表
代码:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int MAX_ = 50; int dp[MAX_]; int dfs(int n){ if(dp[n])return dp[n]; if(n == 1)return dp[n] = 1; if(n == 2)return dp[n] = 3; int cnt = 0; cnt += 2*dfs(n-2) + dfs(n-1); return dp[n] = cnt; } int main() { memset(dp,0,sizeof(dp)); dfs(30); int n, Case; scanf("%d",&Case); while(Case--){ scanf("%d",&n); printf("%d\n",dp[n]); } return 0; }