dp[k],表示长度为k满足题目条件的‘01’串,有几个。如果第k位为0,则dp[k] = dp[k-1],如果第k位为1,那么第k-1位一定为0,则dp[k] = dp[k-2];
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 50;
int dp[MAXN];
void Pre()
{
memset(dp, 0, sizeof(dp));
dp[2] = 3;
dp[3] = 5;
for(int i = 4; i < MAXN; ++i)
dp[i] = dp[i-1] + dp[i-2];
}
int main()
{
int T;
int n;
scanf("%d", &T);
Pre();
while(T--)
{
scanf("%d", &n);
printf("%d\n", dp[n]);
}
return 0;
}