[牛客网]快饿死的XzzF(DFS)

时间:2019-10-11
本文章向大家介绍[牛客网]快饿死的XzzF(DFS),主要包括[牛客网]快饿死的XzzF(DFS)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目来源:链接:https://ac.nowcoder.com/acm/problem/14714

题目描述

XzzF最近过着吃土的日子,饿的神魂颠倒!突然看到有人在做美食节宣传,有好多好吃的,但想吃到这些好吃的可以不容易!得答对主办方出的题。
现在XzzF拿到这样一道题:长度为N的01字符串,且满足以下条件的方案数有多少种?
    1、串中不能有两个或多个连续的0。
例如,10、10101、11101是满足条件的,而00、10001、10010是不满足条件的。
XzzF已经饿的神志不清了!显然没有力气回答这道题了,所以,你一定要帮XzzF吃上那些好吃的,不然就莫得了!

输入描述:

一个整数N(1 <= N <= 20)。

输出描述:

满足题目所述条件的方案数。

示例1

输入
1
输出
2

示例2

输入
2
输出
3
说明
有01、10、11三种满足条件的方案。


基础搜索,用DFS即可,需要分情况讨论,当前是0的话,下一个必然是1,如果当前是1的话,下一个可以0也可以1,n<20,直接暴力搜索即可。

#include <bits/stdc++.h>
using namespace std;
int n, ans = 0;
char d[2] = {'0', '1'};
char s[25];

void dfs(int x){
    if(x==n+1){
        ans++;
        return;
    }
        
    if(s[x-1]=='1') 
        for(int i=0; i<2; i++){
            s[x] = d[i];
            dfs(x+1); 
        } 
    else{
        s[x] = '1';
        dfs(x+1);
    }
}

int main(){
    cin >> n;
    s[0] = '1';
    dfs(1);
    cout << ans;    
    return 0;
} 

原文地址:https://www.cnblogs.com/gdgzliu/p/11653547.html