• 深度优先搜索 codevs 1065 01字符串


    codevs 1065 01字符串

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
    题目描述 Description

    输出仅有0和1组成的长度为n的字符串,并且其中不能含有3个连续的相同子串。

    输入描述 Input Description

    输入文件只有一行一个整数n,表示有0和1组成的字符串的长度。0<=n<=30。

    输出描述 Output Description

    输出文件只有一行一个整数,表示所有满足条件的字符串的个数。

    样例输入 Sample Input

    1

    样例输出 Sample Output

    2

     1 /*dfs+暴力检验
     2 */
     3 #include<iostream>
     4 using namespace std;
     5 #include<cstring>
     6 #include<cstdio>
     7 char ans[35];
     8 int n,sum=0;
     9 bool check(int l1,int r1,int l2,int r2)
    10 {
    11     while(l1<=r1&&l2<=r2)
    12     {
    13         if(ans[l1]!=ans[l2]) return false;
    14         l1++;l2++;
    15     }
    16     return true;
    17 }
    18 void dfs(int k)
    19 {
    20     if(k==n+1)
    21     {
    22         sum++;
    23         return;
    24     }
    25     for(int i=0;i<=1;++i)
    26     {
    27         ans[k]=i+'0';
    28         bool flag=true;
    29         for(int j=1;j<=k/3;++j)
    30           if(check(k-j+1,k,k-j-j+1,k-j)&&check(k-j+1,k,k-j-j-j+1,k-j-j))
    31           {flag=false;
    32            break;
    33                   }
    34         if(flag)
    35         {
    36              dfs(k+1);
    37              ans[k]=0;
    38         }      
    39         else continue;  
    40     }
    41 }
    42 int main()
    43 {
    44     scanf("%d",&n);
    45     if(n==0)
    46     {
    47         printf("0");
    48         return 0;
    49     }
    50     dfs(1);
    51     printf("%d
    ",sum);
    52     return 0;
    53 }
  • 相关阅读:
    Oracle的启动过程共经历四个阶段:
    Oracle数据库启动原理
    Oracle LISTENER监听文件参数详解及Lsnrctl命令综述
    Oracle TNS简述
    linux 各级目录的作用
    oracle 监听器的工作原理
    插入标识列
    sql server日期格式转换方法大全
    html获取输入的值的问题
    关闭窗口 不弹出提示
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5592296.html
Copyright © 2020-2023  润新知