随笔分类 - 搜索
摘要:题目传送门 1 /* 2 题意:告诉一个区间[L,R],问根节点的n是多少 3 DFS+剪枝:父亲节点有四种情况:[l, r + len],[l, r + len - 1],[l - len, r],[l - len -1,r]; 4 */ 5 #include 6 #includ...
阅读全文
摘要:题目传送门 1 /* 2 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 3 在树上的路径权值都小于这两个点 4 DFS/BFS+思维:按照权值的大小,从小的到大的连有向边,搜索最多连接点数即是答案。因为排序后,他们之间...
阅读全文
摘要:题目传送门 1 /* 2 题意:每个点都要有偶数条边,且边染色成相同的两部分,问能有多少种染色方法 3 DFS+剪枝:按照边数来DFS,每种染色数为该点入度的一半,还有如果点不是偶数边就不DFS 4 这是别人的DFS,写的精简强大,膜拜之。。。 5 */ 6 ...
阅读全文
摘要:题目传送门 1 /* 2 BFS:三维BFS,坐标再加上步数,能走一个点当这个地方在步数内不能落到。因为雕像最多8步就会全部下落, 3 只要撑过这个时间就能win,否则lose 4 */ 5 #include 6 #include 7 #include 8 #inclu...
阅读全文
摘要:题目传送门 1 /* 2 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 3 状态压缩+枚举:枚举第一行的所有可能(1 7 #include 8 #include 9 using namespace std;10 11 const int MAXN = 20;12 con...
阅读全文
摘要:题目传送门 1 /* 2 BFS:三维BFS,加上方向。用dp[x][y][d]记录当前需要的最少转向数 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace s...
阅读全文
摘要:题目传送门 1 /* 2 题意:问一个点到另一个点的最少转向次数。 3 坐标离散化+BFS:因为数据很大,先对坐标离散化后,三维(有方向的)BFS 4 关键理解坐标离散化,BFS部分可参考HDOJ_1728 5 */ 6 #include 7 #inc...
阅读全文
摘要:题目传送门 1 /* 2 题意:寻找一个根节点,求min f(u) = ∑ρ(v, u) * p(v)。ρ(v, u)是u到v的距离,p(v)是v点的权值 3 树形DP:先从1出发遍历第一次,sum[u]计算u到所有子节点v的路径权值(之后的点路径有叠加,所以先把路径权值加后*w),...
阅读全文
摘要:题目传送门 1 /* 2 题意:将字符串分割成一个全排列 3 DFS:搜索主要在一位数和两位数的处理,用d1, d2记录个数,在不饱和的情况下,两种都试一下 4 DFS还是写不来,难道是在家里懒? 5 */ 6 #include 7 #include 8 #inc...
阅读全文
摘要:题目传送门 1 /* 2 DFS: 排序后一个一个出发往后找,找到>r为止,比赛写了return ; 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #inc...
阅读全文
摘要:题目传送门 1 /* 2 DFS:按照长度来DFS,最后排序 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 using namespace std;11 12 const int ...
阅读全文
摘要:题目传送门 1 /* 2 BFS:先把1的入队,每个1和它相邻的组合后看看能不能使0变1,若有则添加入队,change函数返回改变了多少个0 3 注意:结果还要加上原来占领的 4 */ 5 #include 6 #include 7 #include 8 #in...
阅读全文
摘要:题目传送门 1 /* 2 题意:问最少替换'*'为'.',使得'.'连通的都是矩形 3 BFS:搜索想法很奇妙,先把'.'的入队,然后对于每个'.'八个方向寻找 4 在2*2的方格里,若只有一个是'*',那么它一定要被替换掉 5 */ 6 #include 7 #i...
阅读全文
摘要:题目传送门 1 /* 2 题意:两点之间有不同颜色的线连通,问两点间单一颜色连通的路径有几条 3 DFS:暴力每个颜色,以u走到v为结束标志,累加条数 4 注意:无向图 5 */ 6 #include 7 #include 8 #include 9 #include 1...
阅读全文
摘要:题目传送门 1 /* 2 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 3 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + 1);前者表示蛋没碎,则往高处(y-i)搜索 4 ...
阅读全文
摘要:题目传送门 1 /* 2 题意:一个圈,每个点有怪兽,每一次射击能消灭它左右和自己,剩余的每只怪兽攻击 3 搜索水题:sum记录剩余的攻击总和,tot记录承受的伤害,当伤害超过ans时,结束,算是剪枝吧 4 回溯写挫了,程序死循环,跑不出来。等回溯原理搞清楚了,下次自...
阅读全文
摘要:题目传送门 1 /* 2 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 3 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操作必然是1红1黑 4 考虑三种情况:a[]连续两个颜色相同,输出...
阅读全文
摘要:题目传送门 1 /* 2 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 3 dp[x][x] = 1 一定要加一个括号;dp[x][y] = 0, x > y; 4 当s[x] 与 s[y] 匹配,则搜索 (x+1, ...
阅读全文
摘要:题目传送门 1 /* 2 题意:告诉起点终点,踩一次, '.'变成'X',再踩一次,冰块破碎,问是否能使终点冰破碎 3 DFS:如题解所说,分三种情况:1. 如果两点重合,只要往外走一步再走回来就行了;2. 若两点相邻, 4 那么要不就是踩一脚就破了或者踩一脚走开再走...
阅读全文
摘要:题目传送门 1 /* 2 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度; 3 DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 4 剪枝主要在4和5:4 相同长度的木棍不再搜索;5 若新的搜索连第一条都没组合出来,直接break...
阅读全文