提高组刷题营 DAY 1 下午
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 下午的更多相关文章
- 提高组刷题营 DAY 2
1.滞空(jump/1s/64M) #include<bits/stdc++.h> using namespace std; typedef long long LL; ; inline ...
- 提高组刷题班 DAY 1 上午
低仿机器人(robo,1s,64M) 题解 大模拟 代码 #include <cstdio> #include <cstring> #include <iostream& ...
- 牛客CSP-S提高组赛前集训营1
牛客CSP-S提高组赛前集训营1 比赛链接 官方题解 before:T1观察+结论题,T2树形Dp,可以换根或up&down,T3正解妙,转化为图上问题.题目质量不错,但数据太水了~. A-仓 ...
- 牛客网CSP-S提高组赛前集训营Round4
牛客网CSP-S提高组赛前集训营 标签(空格分隔): 题解 算法 模拟赛 题目 描述 做法 \(BSOJ6377\) 求由\(n\)长度的数组复制\(k\)次的数组里每个连续子序列出现数字种类的和 对 ...
- NOIP2010提高组真题部分整理(没有关押罪犯)
目录 \(NOIP2010\)提高组真题部分整理 \(T1\)机器翻译: 题目背景: 题目描述: 输入输出格式: 输入输出样例: 说明: 题解: 代码: \(T2\)乌龟棋 题目背景: 题目描述: 输 ...
- NOIP2014提高组第二题联合权值
还是先看题吧: 试题描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...
- 牛客CSP-S提高组赛前集训营3
A 货物收集 显然是一个二分答案的题. #include<iostream> #include<cstdio> #include<cstring> #include ...
- 【枚举】Vijos P1496 火柴棒等式 (NOIP2008提高组第二题)
题目链接: https://vijos.org/p/1496 题目大意: 给你n(n<24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?("+"和"=&qu ...
- 11.5NOIP2018提高组模拟题
书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...
随机推荐
- PAT Basic 1083 是否存在相等的差 (20 分)
给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差? 输入格式: ...
- Spark学习(4)----ScalaTest
一.例子: 1.一个简单例子:https://www.jianshu.com/p/ceabf3437dd7 2.Funsuite例子:https://www.programcreek.com/scal ...
- Python&Selenium 数据驱动【unittest+ddt+mysql】
一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt模块使用mysql数据库为数据源作为测试输入 二.SQL脚本 # encoding crea ...
- 从程序员之死看 IT 人士如何摆脱低情商诅咒
(1) IT公司的创业者苏享茂忽然跳楼自杀了,自杀前,他留下几万字的文字记录.遗书,并且在自己开发的软件界面上,设置了弹出页面,控诉是恶毒前妻逼死了自己. 生命戛然而止,留给亲人痛苦,留给世人震惊. ...
- R语言简单介绍
R语言 概述 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发. R语言的 ...
- Python3下UnicodeDecodeError:‘ASCII’ codec cant decode..(128)
今天准备用Keras跑一下LeNet的程序,结果总是编码出错 源代码是2.7写的,编码格式是utf-8.然后尝试网上各种方法不适用,最后还是解决了 源代码: data = gzip.open(r'C: ...
- Apache、nginx 、lighttpd性能比较
Apache.nginx .lighttpd性能比较 1. web服务器简介 1. lighttpd Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全.快速. ...
- remmina连接xfce桌面的centos7
vnc无法连到linux server,但ssh可以的解决方法 原文引自:https://blog.csdn.net/h00ahaha/article/details/84440449 今天用vn ...
- struts2之单文件上传(7)
前台页面jsp <!-- 拦截的时候用这个 <s:form action="uploadAction" enctype="multipart/form-dat ...
- Codeforces Round #509 (Div. 2) F. Ray in the tube(思维)
题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上 ...