随笔分类 -  搜索

摘要:"题目" 直接爆搜,每次将两个可以合并也就是正整数的值合并,然后删去任意一个值。中途需要注意得点是,在dfs中,temp数千万不要开全局变量。还有一点就是因为原题要满足结果输出要先输出大数,后输出小数,但还是尽量少用swap,尤其是在有temp保存值的时候,还是少用swap 阅读全文
posted @ 2019-11-11 20:42 DAGGGGGGGGGGGG 阅读(457) 评论(0) 推荐(0)
摘要:"题目" 状压DP或者随机化贪心,DFS也能过,但需要掌握很多的搜索剪枝技巧。 本题的搜索剪枝技巧主要采用了减少重复的计算和最优化剪枝。 减少重复计算 由于原图被分为了两块,一块是已经被挖掘的点,一块是还未被挖掘的点。我们考虑每次枚举下一个要加上的点的时候,肯定要找到未被挖掘的点。为了枚举的时候快速 阅读全文
posted @ 2019-11-11 18:14 DAGGGGGGGGGGGG 阅读(169) 评论(0) 推荐(0)
摘要:"题目" 此题目中存在三种棋盘的放置方法(空白,不能活动,能活动)。 而每次变化的格子一定在当前空白格子的周围,因此只需要对空白格子的周围四个状态考虑即可,因此我们设$a[i][j][k]$为白格子在(i,j)的k方向的一个状态,然后我们考虑,如果活动和不能活动的格子已经确定了,那么如果按照暴力的解 阅读全文
posted @ 2019-11-07 09:09 DAGGGGGGGGGGGG 阅读(133) 评论(0) 推荐(0)
摘要:"题目" 搜索+剪枝 对于每个操作都只需要模拟就可轻松得出每一步操作的代码。 这个题需要考虑回溯操作,由于搜索是在一棵搜索树中,因此我们可以记录每一个深度的回溯状态,仅仅用一个数组会出现状态转移失误的情况,所以需要用多个数组。然后考虑剪枝,如果交换不交换没有区别,则不需要交换,而且i向左交换等同于i 阅读全文
posted @ 2019-11-03 16:50 DAGGGGGGGGGGGG 阅读(228) 评论(0) 推荐(0)
摘要:"题目" 第一问: 用广搜类似用$floodfill$的方法。 第二问: 暴力枚举加剪枝,对于每个连通块,枚举跟这个连通块相连的其他与他颜色不同的连通块,然后向外扩展合并颜色与他们俩相同的连通块。扩展合并颜色的时候需要在以每个连通块为节点的图上广搜,每次都将不在当前双色连通块内连通块且颜色和当前双色 阅读全文
posted @ 2019-10-31 08:22 DAGGGGGGGGGGGG 阅读(184) 评论(0) 推荐(0)
摘要:竞赛中找环有许多种问题,判断是否有环,找到环上的点,找到环上的边等等。 而只需要找到环上相邻的两点,或者环上的一条边就可以解决这三个问题。 有向图中,可以用拓扑排序的方法,把将拓扑排序完后限制条件仍未被清零的点即在环上的点。 阅读全文
posted @ 2019-10-26 11:26 DAGGGGGGGGGGGG 阅读(3062) 评论(1) 推荐(0)
摘要:"题目" DP或者迭代加深搜索,比较考验递归的搜索。 题目第一问可以用迭代加深搜索限制层数。 第二问需要满足字典序最小,所以我们可以在搜索的时候把比当前答案字典序大的情况剪枝掉。 然后考虑怎么搜索,对于每一位我们都要先搜索出每一位所能到达的所有情况包括选或者选几个。 c++ include defi 阅读全文
posted @ 2019-10-23 10:55 DAGGGGGGGGGGGG 阅读(149) 评论(0) 推荐(0)
摘要:"题目" 搜索,注意判断特殊情况,并且区分开什么时候转弯什么时候停止。然后转弯的时候更是要注意是否会进入障碍。 阅读全文
posted @ 2019-10-22 20:08 DAGGGGGGGGGGGG 阅读(153) 评论(0) 推荐(0)
摘要:"题目" 二分加广搜 阅读全文
posted @ 2019-10-21 15:51 DAGGGGGGGGGGGG 阅读(159) 评论(0) 推荐(0)
摘要:"题目" 搜索。并且通过题意所得到的信息先推出几个性质。 如果每个字母在开头的出现次数等于结尾的出现次数,则说明每个单词都有可能要成为起点。 而如果有字母在开头的出现次数比结尾的出现次数大,则只有以该字母为开头的单词才有机会成为起点,这样我们就可以只从他们开始dfs了。 阅读全文
posted @ 2019-10-15 14:18 DAGGGGGGGGGGGG 阅读(292) 评论(0) 推荐(0)
摘要:"题目" $dfs+$证明。 对于题目描述,可以发现$K$其实就是大于等于原图中最大度数的最小奇数,因为如果原图度数最大为奇数,则最多颜色肯定为K,而如果原图最大度数为偶数,则$K$又是奇数,则最多颜色也肯定小于等于$K$。 然后可以$dfs$染色,染色有两种方法,一种是枚举颜色,然后判断可行性并考 阅读全文
posted @ 2019-09-09 17:47 DAGGGGGGGGGGGG 阅读(201) 评论(0) 推荐(0)
摘要:"题目" 如果暴力的话,时间复杂度是$rcC(n, n/2)^2$,主要考察搜索枚举行和列,并没有用到DP的思想。 考虑优化的话,发现枚举行或列中至少需要一步,因为这个题只能预处理优化,如果都不枚举,就相当于盲人摸象,无法预处理来优化。 因此要搜索枚举行或列,然后预处理并在列或行上跑DP,这样就可以 阅读全文
posted @ 2019-07-02 17:39 DAGGGGGGGGGGGG 阅读(227) 评论(0) 推荐(0)
摘要:"题目" 搜索+剪枝,主要考察细节和搜索的顺序,首先可以发现所有数据均为整数,所以初始化每层的蛋糕R和H是整数,然后从高层向低层搜索,然后预处理出各层向低层的最小面积和体积用来剪枝。 就可以每层从当前最大半径向最小半径枚举,并分类讨论加剪枝即可。 c++ include using namespac 阅读全文
posted @ 2019-06-28 17:39 DAGGGGGGGGGGGG 阅读(156) 评论(0) 推荐(0)
摘要:"题目" 方法很多,最经典的是用搜索的算法,也就是$IDA $算法搜索。 $IDA $算法是每次规定一个搜索深度,并在搜索的时候限制该搜索深度,从而达到把深搜的优点和广搜的优点结合起来优化时间的一个算法。 说白了,就是一个剪枝借鉴了广搜的思想。 c++ include using namespace 阅读全文
posted @ 2019-06-25 17:29 DAGGGGGGGGGGGG 阅读(156) 评论(0) 推荐(0)
摘要:"题目" 搜索加贪心其实并不需要用到$DP$,搜索也是比较简单地搜索。 对于每个第一行的城市进行类似于滑雪那道题的搜索,然后记录最后一行它所覆盖的区间,易得一个一行城市只会有一个区间。然后可以在最后进行线段覆盖贪心即可求出答案。要注意区间闭开和边界问题。 $Code$ 阅读全文
posted @ 2019-06-13 20:47 DAGGGGGGGGGGGG 阅读(166) 评论(0) 推荐(0)
摘要:"题目" 该题目标签是DP,但是其实数据范围可以用记忆化搜索来解决,并且代码实现起来会简单一些,用二分查找来优化。 c++ include using namespace std; int n, k, minn = 2147483647, dp[101000]; multimap m; struct 阅读全文
posted @ 2019-05-31 17:15 DAGGGGGGGGGGGG 阅读(166) 评论(0) 推荐(0)
摘要:"题目" 一道很经典的搜索题,可以锻炼搜索的能力,比如可以用dfs覆盖加dp的方式来寻找+更新答案。而且还可以通过在递归中增加数组的方式来辅助搜索。 c++ include using namespace std; int n, k, ans[101000], maxn, tot, a[101000 阅读全文
posted @ 2019-05-14 17:00 DAGGGGGGGGGGGG 阅读(196) 评论(0) 推荐(0)
摘要:"题目" 作为$NOIp2017D1T3$ 这个题还是很良心的,至少相对于$NOIp2018$来说,希望$NOIp2019$不会这么坑吧。 这个题可以作为记忆化搜索的进阶题了,做这个题的方法也是多种多样。 $30pts$ 30分可以直接套用最短路计数的模板直接套上就可以了。 $100pts$ 100 阅读全文
posted @ 2019-02-24 20:16 DAGGGGGGGGGGGG 阅读(152) 评论(0) 推荐(0)
摘要:"题目" 这个提示一个简单的最短路计数,除了用数组存上最短路的个数的做法以外,还有可以在得出最短路之后,搜索加剪枝的方法来通过该题。 可以反向搜索用A 的方法来通过,但是这个题的去重十分的恶心,需要一些玄学操作。 $Code$ c++ // luogu judger enable o2 includ 阅读全文
posted @ 2019-02-22 21:09 DAGGGGGGGGGGGG 阅读(134) 评论(0) 推荐(0)
摘要:"题目" 这是一道简单的搜索题,考查的还是比较基础的东西,其时搜索有时候并不难写,主要是要想到怎么搜。比如这个题,如果想二维四个方向搜则没有头绪,反之因为搜索是用递归实现的,所以我们可以使用递归的特性,把大问题处理成小问题来解决。 所以我们可以用处理每一行的形式,把这一行的最大值求出来,再接着向下一 阅读全文
posted @ 2018-12-22 21:23 DAGGGGGGGGGGGG 阅读(422) 评论(0) 推荐(0)