随笔分类 -  搜索——dfs

摘要:题目链接:https://www.acwing.com/problem/content/184/ 给出正方形和某些边被删除,要求删除最少的边数使得其中没有任何正方形,策略就是将所有的正方形都存起来,可以从图中看见正方形的四条边都是等差数列,边长为5的大正方形拥有60条小边 接下来只要枚举最小的正方形 阅读全文
posted @ 2020-06-22 12:35 WA自动机~ 阅读(232) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=2286 对于24个数组成的#,一共有8中拉的方式,求使得中间8个数相同的最小操作以及操作方式,由于一个结点扩展的分支有7个,所以朴素dfs将会在无法获得最优解的分支上花费太多时间 通过枚举操作次数可以避免dfs搜索过深,并且加上未来估计 阅读全文
posted @ 2020-06-22 10:28 WA自动机~ 阅读(204) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=3460 题目给定一个乱序序列,长度为n,其中的数是1-n,操作是将其中一段插入任何一个位置,问最少需要多少次操作能够使得序列有序,超过四次直接输出5ormore 由于每个结点的分支数量达到了560,所以四层直接搜索时间复杂度很高,考虑I 阅读全文
posted @ 2020-06-22 09:17 WA自动机~ 阅读(185) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://www.acwing.com/problem/content/173/ 要求从n件物品中选出若干件,重量之和不超过w并且最接近w,由于有45件最多,所以O(2^n)时间复杂度过高,可以考虑减半先搜索出结果,用另一半在前一半中二分寻找, 最终拼成结果,时间复杂度约为O(2^n 阅读全文
posted @ 2020-06-19 18:54 WA自动机~ 阅读(206) 评论(0) 推荐(0) 编辑
摘要:题目链接;http://poj.org/problem?id=2248 要求给出一个严格递增的数列,首元素是1,尾元素是n,并且要求最短。 可以得知,在一百以内的最优策略中,搜索的深度不会超过10,深度最坏的情况下是有100层的,而且深处数的分支会越来越多,考虑到层数最多是10层,所以我们可以考虑使 阅读全文
posted @ 2020-06-19 17:05 WA自动机~ 阅读(152) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=1190 剪枝的常用思考策略:优化搜索顺序(从决策数量越少的位置开始决策)、排除冗余的等效的操作、可行性剪枝、最优性剪枝、上下界剪枝,其中在可行性剪枝方面可以利用“未来期望进行剪枝” 要充分利用不等式关系进行放缩,将不可能的状态进行剪枝, 阅读全文
posted @ 2020-06-19 15:00 WA自动机~ 阅读(153) 评论(0) 推荐(0) 编辑
摘要:题目链接;http://poj.org/problem?id=1011 又是拼木棍呀,不过这次我是对他的剪枝原理完全弄清楚了,最后两条剪枝还真的是很难想到的。这次的剪枝中加入了一条:我们在某一跟木棍中拼接时,选择的木棍长度是递减的,这样就保证了搜索树中不会有重叠的部分,不过其实在木棍中,小木棒是无序 阅读全文
posted @ 2020-06-19 11:45 WA自动机~ 阅读(202) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=3074 本题的重点在于利用二进制位高效地判断一个位置能填哪些数,行、列、九宫格中能填的数的用一个二进制数表示,相与便是能填的数的二进制表示,使用lowbit函数可以 依次取出最低有效位进行搜索。基于几个常识:我们做数独的时候一定每次都是 阅读全文
posted @ 2020-06-19 10:27 WA自动机~ 阅读(223) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://www.acwing.com/problem/content/167/ 首先看到这个数据范围就知道需要用搜索来实现,保存的当前状态是一共用了多少缆车,当前扫描的小猫编号 ,每个缆车中的重量。其中第三个状态是可以用全局数组来维护的, 前面两个状态作为dfs的参数传入,每次可以 阅读全文
posted @ 2020-06-19 09:13 WA自动机~ 阅读(251) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=3134 题目给出一个初始的x,要求操作只能是乘与除,问最少需要多少步才能算出x^n。这道题等价于给一个1,只能加或者减,问最少需要多少步才能得到n。可以把n拆开成许多个数相加或者相减,从搜索的角度来讲,用普通dfs的话很可能深度达到10 阅读全文
posted @ 2020-04-01 09:47 WA自动机~ 阅读(115) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1175/ 题目大意就是给出地图,上面有若干的数,相当于连连看,给了q个查询,问给出的两个位置的数能否在两次转弯以内划线消除。dfs即可解决,要记录路径,防止往回走,此外就是剪枝了,如果已经转过了两次弯但是跟终点的横 阅读全文
posted @ 2020-03-17 14:26 WA自动机~ 阅读(162) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/5706/ 简单的规定深度进行搜索,代码如下: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef unsigned int ui; 4 typede 阅读全文
posted @ 2020-03-16 20:26 WA自动机~ 阅读(125) 评论(0) 推荐(0) 编辑
摘要:简单的搜索,不必多说了,初始状态下每个点能到达的长度是1,它本身。还有,注意关掉文件重定向,被坑好多次了。 代码如下: 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 typedef unsigned int ui; 阅读全文
posted @ 2020-03-08 09:43 WA自动机~ 阅读(111) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://www.luogu.com.cn/problem/P1378 题目中给出矩形的长宽和一些点,可以在每个点放油滴,油滴会扩展,直到触碰到矩形的周边或者其他油滴的边缘,求出剩余面积的最小值,就是求油滴面积的最大值。策略是dfs加上回溯,暴力求解。 代码如下: 1 #includ 阅读全文
posted @ 2020-03-04 23:15 WA自动机~ 阅读(175) 评论(0) 推荐(0) 编辑
摘要:题目网址:https://www.luogu.com.cn/problem/P1363 迷宫是无限多块地图拼接而成的,问是否可以在迷宫中走无限远。解决方案是dfs,走出初始地图之后的位置映射到原位置(取模),如果同一个映射位置两次经过的坐标不一样,则表示这个位置可以无限多次经过,就走不出迷宫。 代码 阅读全文
posted @ 2020-03-04 21:29 WA自动机~ 阅读(189) 评论(0) 推荐(0) 编辑
摘要:题目网址:https://www.luogu.com.cn/problem/P1074 大意就是在一个9*9的数独中填数,要求行列宫都是九个互不相同的数字,给定一定的得分机制,要求求解最大得分。思路大致从零最少的行开始搜索(试想现实中你做数独一定是这样的方法),然后只要将0位置的信息保存,总数就是深 阅读全文
posted @ 2020-03-01 10:41 WA自动机~ 阅读(138) 评论(0) 推荐(0) 编辑
摘要:两颗黑子之间的白子可以翻装成黑子,两颗白子之间的黑子可以翻转成白子,对于一个给定位置,有八个方向有翻转其他颜色的子的可能。规则之一是下棋的位置一定要能翻转对方的子。 求最优情况:黑子能翻转的白子个数的最大值。只要对有限的位置进行搜索就行,搜索8*8的位置,每个位置搜索八个方向,每个方向分别计算白子数 阅读全文
posted @ 2020-02-29 19:14 WA自动机~ 阅读(135) 评论(0) 推荐(0) 编辑
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef unsigned int ui; 4 typedef long long ll; 5 typedef unsigned long long ull; 6 #define pf pri 阅读全文
posted @ 2020-02-29 19:03 WA自动机~ 阅读(164) 评论(0) 推荐(0) 编辑
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef unsigned int ui; 4 typedef long long ll; 5 typedef unsigned long long ull; 6 #define pf pri 阅读全文
posted @ 2020-02-29 18:58 WA自动机~ 阅读(139) 评论(0) 推荐(0) 编辑
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef unsigned int ui; 4 typedef long long ll; 5 typedef unsigned long long ull; 6 #define pf pri 阅读全文
posted @ 2020-02-29 18:54 WA自动机~ 阅读(190) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示