深度优先搜索 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\n",sum);
52     return 0;
53 }
时间: 2024-11-16 03:18:36

深度优先搜索 codevs 1065 01字符串的相关文章

1065 01字符串

1065 01字符串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 输出仅有0和1组成的长度为n的字符串,并且其中不能含有3个连续的相同子串. 输入描述 Input Description 输入文件只有一行一个整数n,表示有0和1组成的字符串的长度.0<=n<=30. 输出描述 Output Description 输出文件只有一行一个整数,表示所有满足条件的字符串的个数. 样例输入 Sample Inp

深度优先搜索 codevs 1064 虫食算

codevs 1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045    +    8468#6633       44445506978 其中#号代表被虫子啃掉的数字.根据算式,我们很容易判断:第一行的两个数字分别是5和3,第二行的数字是5

深度优先搜索 codevs 1031 质数环

codevs 1031 质数环 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. 输入描述 Input Description 只有

代码与算法集锦-归并排序+树状数组+快排+深度优先搜索+01背包(动态规划)

归并排序 求逆序数 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 首先考虑下如何将将二个有序数列合并.这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数.然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可. //将有序数组a[]和b[]合并到c[]中 void MemeryArray(int a[], int n, int b[], int m, int c

POJ 1979 Red and Black 深度优先搜索上手题

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21738   Accepted: 11656 Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a

[LeetCode OJ] Word Search 深度优先搜索DFS

Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be us

DFS 深度优先搜索例题

约翰的农场被暴风雨给淹没了,损失很大,他的保险公司将支付给他,但是支付金额取决于被淹没的最大面积.这个农场是一个边长分别为n.m的矩形,包含nm个空间,每个空间要么是干的,要么是被淹没的,一共有k个空间被淹没.求最大的淹没面积. 题目分析:首先建立坐标,标记被淹没的空间,然后从左上角搜索被淹没的空间,并取消标记,再以此为中心向四周搜索是否有被淹没的空间,有的话继续计数并取消标记,以此类推,找出所有被淹没的空间,最后排序,找到被淹没最大的面积. #include <stdio.h>#includ

【图论】广度优先搜索和深度优先搜索

写在最前面的 这篇文章并没有非常详细的算法证明过程.导论里面有非常详细的证明过程.本文只阐述“广度优先和深度优先搜索的思路以及一些简单应用”. 两种图的遍历算法在其他图的算法当中都有应用,并且是基本的图论算法. 广度优先搜索 广度优先搜索(BFS),可以被形象的描述为“浅尝辄止”,具体一点就是每个顶点只访问它的邻接节点(如果它的邻接节点没有被访问)并且记录这个邻接节点,当访问完它的邻接节点之后就结束这个顶点的访问. 广度优先用到了“先进先出”队列,通过这个队列来存储第一次发现的节点,以便下一次的

十大基础实用算法之深度优先搜索和广度优先搜索

深度优先搜索算法(Depth-First-Search),是搜索算法的一种.它沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点.这一过程一直进行到已发现从源节点可达的所有节点为止.如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止.DFS属于盲目搜索. 深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相