请计算长度为 N N N 且不含连续 1 1 1 的 01 01 01 串的个数。
例如,当
N
N
N =
3
3
3时,答案为
5
5
5,因为长度为
3
3
3 且不含连续
1
1
1 的
01
01
01 串一共
5
5
5 个:
000
000
000,
001
001
001,
010
010
010,
100
100
100,
101
101
101。
输入格式
一个整数
N
N
N。
输出格式
一个整数,表示结果。
数据范围
1 ≤
N
N
N ≤ 20
输入样例:
3
输出样例:
5
/*
Author: Albert Tesla Wizard
Time: 2023/7/9 22:36
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 50;
int d[N], n, ans = 0;
bool st[N];
void dfs(int u) {
if(u == n + 1) {
//for(int i = 1; i <= n; i ++) cout << d[i] << " ";
//cout << '\n';
ans ++;
return ;
}
if(! st[u]) {
if(d[u - 1] == 1) {
d[u] = 0;
st[u] = true;
dfs(u + 1);
st[u] = false;
} else if(d[u - 1] == 0) {
d[u] = 1;
st[u] = true;
dfs(u + 1);
st[u] = false;
d[u] = 0;
st[u] = true;
dfs(u + 1);
st[u] = false;
}
}
}
int main() {
memset(d, -1, sizeof(d));
d[0] = 0;
memset(st, false, sizeof(st));
cin >> n;
dfs(1);
cout << ans << '\n';
return 0;
}