#1904. 珅泽教育CSP-J第一轮模拟考第十一套 第 28 题

珅泽教育CSP-J第一轮模拟考第十一套 第 28 题

第3篇

#include<iostream>

int choose[20];
int dfs(int m, int n)
{
    if (m == n) {
        bool flag = true;
        for (int i = 0; i + 1 < n; ++i) {
            if (choose[i] && choose[i+1]) {
                flag = false;
            }
        }
        if (flag) {
            return 1;
        }
        else {
            return 0;
        }
    }
    else {
        choose[m] = true;
        int pick = dfs(m+1, n);
        choose[m] = false;
        int drop = dfs(m+1, n);
        return pick + drop;
    }
}

int fib(int n)
{
    int f[21];
    f[0] = 1;
    f[1] = 2;
    for (int i = 2; i <= n; ++i) {
        f[i] = f[i-1] + f[i-2];
    }
    return f[n];
}

int main()
{
    int n;
    std::cin >> n;
    std::cout << dfs(0, n) << " ";
    std::cout << fib(n) << "\n";
}

程序结束后,choose 数组的元素全部等于 false

{{ select(1) }}

  • 正确
  • 错误