题目地址
递推题感觉就是一般给出了一些进行下一步的约束条件,所以第n个和前面的项存在关系。突然间感觉好奇妙,可是想描述出来又力不从心。是由这道题的递推推导得到一些感觉,写一下这道题的递推过程,以及看了别人的推导过程后顿悟。
开始做这种题目时,总是想通过排列或者组合来做,可是因为有了约束条件,所以并不是简单的排列组合,抑或不是排列组合。进行下一步时总是有约束条件,这就当前步与下一步存在关系了。
对于有n个长度的空位F(n),第n位可以是E或F,所以是2 * F(n - 1), 也可以是O,但是因为题目说不可以有OO,所以要想有OO, 第n - 1位不能够是O,也只能是E或F,也就是2 * F[n - 2].
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
int main(void) {
long long a[40];
a[1] = 3;
a[2] = 8;
for(int i = 3;i <= 39; i++) {
a[i] = 2 * a[i - 1] + 2 * a[i - 2];
}
int n;
while(scanf("%d", &n) != EOF) {
printf("%lld\n", a[n]);
}
return 0;
}