计算不含有“11”子串的m长度的01串共有多少个,m-1长度的01串有加0 或 加1两种方式来成为m长度的01串,
1.第m位是0的情况,就等于前m-1位的情况全部加0
2.第m位是1是,第m-1位一定是0,而m-1长度的01串可能不就等于m-2长度的01串全部加0吗,所以第m位是1的可能就=第m-2长度的01串全部加0的可能
这里用dp(m)表示m长度的01串的个数
dp(1)=2;
dp(2)=3;
dp(3)=dp(1)+dp(2);
dp(4)=dp(2)+dp(3);
…………
综上,dp(m)=dp(m-1)+dp(m-2)
#include<iostream>
using namespace std;
int main() {
int n,i,m,a[41]= {0,2,3};
for(i=3; i<=40; i++)
a[i]=a[i-1]+a[i-2];
cin>>n;
while(n--) {
cin>>m;
cout<<a[m]<<endl;
}
return 0;
}