题意:输入一个数n表示n位二进制数,求n位二进制数0和1的各种组合中,没有连续两个1的情况数量。
我们可以用dp0[i]表示i位二进制数中第i位为0且没有连续两位1的数量,用dp1[i]表示i位二进制数中第i位为1且没有连续两位1的数量。那么第i+1位如果添加0则可以由第i位为0和1两种情况转换而来,也就是dp0[i+1] = dp0[i]+dp1[i]。第i+1位如果添加1则只能由第i位为0转换而来,也就是dp1[i+1] =dp0[i]。
我AC的代码如下:
#include<iostream>
using namespace std;
int main()
{
int n,t,i,j,a0,a1;
cin >> n;
for(i=0;i<n;i++)
{
cin >> t;
a0=1;
a1=1;
for(j=2;j<=t;j++)
{
int temp = a0;
a0 = a0 + a1;
a1 = temp;
}
cout << "Scenario #"<<i+1<<":"<<endl;
cout << a0+a1<<endl;
cout << endl;
}
return 0;
}