DFS

深度优先搜索

通过搜索得到一棵树形图

策略:只要能发现没走过的点,就走到它。有多个点可走就随便挑一个,如果无路可走就回退,再看有没有没走过的点可走。

在图上寻找路径【少数可用最短路解决】:最短路不能解决路径有顺序的,也就是如果路径的边权与之前经过的点火这路有关,那就只能深搜

解决递归形式的问题

有后效性的选择问题

组合问题

状态可能很多,因此数据范围一般较小

1、状态表示

2、剪枝

剪枝的方法:

最优答案剪枝

记忆化剪枝

可行性剪枝

……

1、洪水[ 1s 32M ]

题解

数据范围小,搜索

2、辛苦的老园丁 [1s 128M] [1s 32M]

题解

建反图找团(简单地说,团是G的一个完全子图)

原来输入建图是标记的两点之间不能有连边,建反图之后,连边的就是可以连通的

剪枝:

1.如果一个点与点i当前没有连边,那么之后永远都不会连边,那么就可以把点i从最大团候选中删掉

2.利用可行点剪枝  sum+tot<=ans ,舍弃

3.利用当前答案剪枝ans(2)+tot<=ans

(tot 是团不断累加的权值,sum是序列里面剩下的所有东西的权值和

若sum+tot<=ans ,舍弃)

可能组成最大团的点一开始在一个序列里

取出一个点,不断扩展,当序列为空,扩展完了

首先拿出1 ,那么序列被更新为与1相连的点

不断扩展,直到队列为空,找完团了

--->sum+tot<=ans

最大团主函数:

为什么找最大团而不是最大独立集呢??

3、生日蛋糕 [ 1s 10M]

题解

4、靶形数独[2s128M]

题解

5、棋盘分割 [1s 16M]

题解


BFS

宽度优先搜索

1、密室逃脱 [ 1s 64M ]

题解

queue<pair<int,int> > Q;
int FindPath(pair<int,int> b,pair<int,int> e) {
for (int i=;i<n;++i) for (int j=;j<m;++j) dis[i][j]=1e9+;
Q.push(b); dis[b.first][b.second]=;
while (!Q.empty()) {
pair<int,int> u=Q.front(); Q.pop();
int x=u.first,y=u.second;
for (int i=;i<;++i) {
int tx=x+dx[i],ty=y+dy[i];
if (CoordValid(tx,ty) && mp[tx][ty]!= && dis[tx][ty]>dis[x][y]+) {
dis[tx][ty]=dis[x][y]+;
Q.push(make_pair(tx,ty));
}
}
}
return dis[e.first][e.second];
}

2、Prime Path[ 1s 64M ]

题解

记录当前素数的值

每次选择一个位置,将其该改为另一个数

检查新的数是否是素数

3、拯救行动 [ 1s 64M ]

题解

(Python源码)

BFS部分

4、抓住那头牛 [ 1s 64M ]

题解

BFS

双向BFS(DBFS)

对比BFS和DFS

广搜一般用于状态表示比较简单求最优策略的问题l

优点:是一种完备策略,即只要问题有解,它就一定可以找到解。并且,广度优先搜索找到的解,还 一定是路径最短的解。

缺点:盲目性较大,尤其是当目标节点距初始节点较远时,将产生许多无用的节点,因此其搜索效率较低。需要保存所有扩展出的状态,占用的空间大

深搜几乎可以用于任何问题

只需要保存 从起始状态到当前状态路径上的节点

根据题目要求凭借自己的经验和对两个搜索的熟练程度做出选择


枚举

1、苹果消消乐 [ 1s 64MB]

题解

选择连续的香蕉时最优

枚举选择的香蕉起始位置,计算答案

2、Matrix  [ 2s  512MB ]

题解

Check函数:

4、特殊密码锁[ 1s 64M ]

题解

1、  已知,在首位状态固定后,后续的操作是确定的。

2、  只需要枚举首位是否按即可。

5、恼人的青蛙[ 2s 64M ]

题解

①不是一条行走路径:只有两棵被踩踏的水稻;

②是一条行走路径,但不包括(2,6)上的水道;

③不是一条行走路径:虽然有3棵被踩踏的水稻,

但这三棵水稻之间的距离间隔不相等。

例如,图4的答案是7,

因为第6行上全部水稻恰好构成一条青蛙行走路径。

题解

枚举主函数

枚举得到最大步数

重识枚举

枚举:基于已知信息的猜测,从可能的答案集合中枚举并验证

验证复杂度尽可能小

枚举范围尽可能小(利用条件缩小枚举空间)

选择合理的枚举顺序(正序,倒序)

枚举什么?

怎么枚举?

怎么减少枚举?


二进制枚举

5、熄灯问题[ 1s 64M ]

题解

二进制枚举

推导最后一行

二进制枚举

二进制的枚举一般用以枚举集合

对集合的枚举涉及到不同的集合内部元素的选择

枚举子集

for(int S1=S;S1!=0;S1=(S1-1)&S){

S2=S^S1;

}

提高组刷题营 DAY 1 下午的更多相关文章

  1. 提高组刷题营 DAY 2

    1.滞空(jump/1s/64M) #include<bits/stdc++.h> using namespace std; typedef long long LL; ; inline ...

  2. 提高组刷题班 DAY 1 上午

    低仿机器人(robo,1s,64M) 题解 大模拟 代码 #include <cstdio> #include <cstring> #include <iostream& ...

  3. 牛客CSP-S提高组赛前集训营1

    牛客CSP-S提高组赛前集训营1 比赛链接 官方题解 before:T1观察+结论题,T2树形Dp,可以换根或up&down,T3正解妙,转化为图上问题.题目质量不错,但数据太水了~. A-仓 ...

  4. 牛客网CSP-S提高组赛前集训营Round4

    牛客网CSP-S提高组赛前集训营 标签(空格分隔): 题解 算法 模拟赛 题目 描述 做法 \(BSOJ6377\) 求由\(n\)长度的数组复制\(k\)次的数组里每个连续子序列出现数字种类的和 对 ...

  5. NOIP2010提高组真题部分整理(没有关押罪犯)

    目录 \(NOIP2010\)提高组真题部分整理 \(T1\)机器翻译: 题目背景: 题目描述: 输入输出格式: 输入输出样例: 说明: 题解: 代码: \(T2\)乌龟棋 题目背景: 题目描述: 输 ...

  6. NOIP2014提高组第二题联合权值

    还是先看题吧: 试题描述  无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...

  7. 牛客CSP-S提高组赛前集训营3

    A 货物收集 显然是一个二分答案的题. #include<iostream> #include<cstdio> #include<cstring> #include ...

  8. 【枚举】Vijos P1496 火柴棒等式 (NOIP2008提高组第二题)

    题目链接: https://vijos.org/p/1496 题目大意: 给你n(n<24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?("+"和"=&qu ...

  9. 11.5NOIP2018提高组模拟题

    书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...

随机推荐

  1. Spring之Redis访问(Spring-data-redis)

    Spring-data-redis,是spring-data框架中,比较常用的,基于key-value键值对的数据持久层框架.Spring-data-redis,是一个基于Template模板开发的数 ...

  2. SpringBoot定时任务(schedule、quartz)

    Scheduled 只适合处理简单的计划任务,不能处理分布式计划任务.优势:是spring框架提供的计划任务,开发简单,执行效率比较高.且在计划任务数量太多的时候,可能出现阻塞,崩溃,延迟启动等问题. ...

  3. 测试clang-format的格式化效果

    我自己写的业余框架已告一段落,主体功能已完成,剩下的就是优化.第一个要优化的,就是代码格式.我一直是用编辑器写代码的,从之前的UltraEdit到notepad++到sublime text,再到现在 ...

  4. ubuntu系统---切换Py2.X与Py3.X版本

    ubuntu系统---切换Python2.X与Python3.X版本 Python3.X将成为以后的趋势,Python2.X当前用的稍多的版本,但现在不再更新了.因此,小主电脑里也安装了好两个版本的p ...

  5. Oracle 单列去重 显示单行所有列数据

    问题:test_table 表中有 a,b,c 三个字段,求根据字段a 去除重复数据,得到去重后的整行数据 根据mysql的经验尝试以下方法均失败 1.使用 distinct 关键字 (oracle查 ...

  6. R的数据结构--数组

    数组:可以认为数组是矩阵的扩展,它将矩阵扩展到2维以上.如果给定的数组是1维的则相当于向量,2维的相当于矩阵. R语言中的数组元素的类型也是单一的,可以是数值型,逻辑型,字符型或复数型 参数解释 ar ...

  7. HTML5——5 HTML5 SVG

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 01windows7下安装rabbitmq

     1.直接双击rabbitmq-server-3.6.10.exe,会提示你缺少Erlang安装包,问你是否下载,点击是就可以了,因为我自己下载,我就直接先安装otp_win64_20.0.exe,直 ...

  9. adreno的tbdr

    看完apple的(&&powervr) 再来撸高通的.. FlexRender 能自己选三种模式 Direct Binning 这个只是分块 HWVizBinning 这个估计就是tb ...

  10. centos6.5linux安装docker之升级内核

    一.运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡 在yum的ELRepo源中,有mainline(4.5).long-t ...