HDU 2047

HDU 2047

思路

考虑第 \(n\) 位为 \(F\) 或者 \(E\) ,第 \(n - 1\) 位,可以填\(3\) 个字母, \(f[n] = 1*2f[n-1]\)

考虑第 \(n\) 位为\(O\) ,因为两个\(O\) 不能相邻,所以,第 \(n- 1\) 位,只能填\(2\) 个字母,第\(n-2\) 可以填\(3\)个字母

\(f[n]=1*2*f[n-2]\)

总共的答案是 \(f[n]=2(f[n-1] + f[n-2])\)

#include <bits/stdc++.h>
using namespace std;
const int N = 100;
typedef long long LL;
LL f[N] = {0,3,8},k = 2;
int main() {
    int n;
    while(cin >> n) {
        if(n > k) {
            while(k <= n) {
                k ++;
                f[k] = (f[k - 1] + f[k - 2]) * 2;
            }
        }
        cout << f[n] << endl;
    }
    return 0;
}
posted @ 2020-02-13 01:15  lukelmouse  阅读(130)  评论(0编辑  收藏  举报