对于每一个数,它是前一个数在末尾加1或0得到的;
状态为dp[][2],dp[i][0]表示长度为i,结尾为0的数的个数,dp[i][1]表示长度为i,结尾为1的数的个数;
dp[i][0] = dp[i-1][0] + dp[i-1][1];
dp[i][1] = dp[i-1][0];
#include<iostream>
using namespace std;
int main()
{
int dp[50][2],i;
dp[1][0] = 1;
dp[1][1] = 1;
for(i = 2;i <= 45;i++)
{
dp[i][0] = dp[i-1][0] + dp[i-1][1];
dp[i][1] = dp[i-1][0];
}
int t,count = 1;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<"Scenario #"<<count++<<":"<<endl<<dp[n][0] + dp[n][1]<<endl<<endl;
}
return 0;
}