cnt[i]代表长度为i的符合条件的数量,cnt[i][0/1]代表长度为i并且0/1开头的符合条件的字符串数量
则cnt[i]=cnt[i][0]+cnt[i][1]=cnt[i-1]+cnt[i-1][1]+cnt[i-2][0]
#include<bits/stdc++.h> using namespace std; long long cnt[50][5]; int main(){ memset(cnt,0,sizeof(cnt)); cnt[1][0]=cnt[1][1]=1; cnt[2][0]=cnt[2][1]=2; for(int i=3;i<22;i++){ cnt[i][0]=cnt[i-1][0]+cnt[i-1][1]; cnt[i][1]=cnt[i-1][1]+cnt[i-2][0]; } int n; while(cin>>n&&n!=-1){ cout<<cnt[n][0]+cnt[n][1]<<endl; } }