给一个长度为n的01串,问不出现连续的1序列有多少种
简单DP。
#include <iostream>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int t;
int n;
int cnt=0;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
cnt++;
long long dp0[55];//第i位是0
long long dp1[55];//第i位是1
memset(dp0,0,sizeof(dp0));
memset(dp1,0,sizeof(dp1));
dp0[1]=1;
dp1[1]=1;
for(int i=2;i<=n;i++)
{
dp0[i]+=(dp1[i-1]+dp0[i-1]);//下一位是0的情况,可以出现连续的0
dp1[i]+=dp0[i-1];//不能出现连续的1
}
printf("Scenario #%d:\n",cnt);
printf("%lld\n",dp0[n]+dp1[n]);
if(t>=1)
{
printf("\n");
}
}
return 0;
}