kuangbin专题
HannibaL3
这个作者很懒,什么都没留下…
展开
-
Nightmare Ⅱ HDU - 3085
题目链接 题目思路: 男女孩同时移动,需要双向广搜,我们可以开男生队列与女生队列存入位置,每次按步数step来枚举,对于男生,每次扩展三步,如果发现女生已经走过,则直接返回step,对女生来说,每次扩展一步,如果发现男生已经走过,则直接返回step,因为鬼每次先走,需要先判断当前点与鬼的曼哈顿距离是否满足题意 代码: #include <bits/stdc++.h> #define x first #define y second #define fi first #define se seco原创 2022-01-03 12:48:59 · 397 阅读 · 0 评论 -
Magic Cube ZOJ - 2477
题目链接 题意: 给出魔方初始图,每次从6个面中选一个面进行旋转操作,求还原魔方所需要的最小步数,并输出每次操作和旋转方向,答案保证在5步以内 题目分析: 很恶心的一道题,题意5步一眼IDA* 启发函数也挺好想,找出每个面与中心颜色不同的数量, 每次旋转最多改变12个, 当不同数量/12>深度时剪枝,每次操作我们可以打表模拟6种操作时会导致的位置变化 不懂操作变化的可以点击 代码: #include <bits/stdc++.h> #define x first #define y sec原创 2022-01-03 12:40:02 · 96 阅读 · 0 评论 -
DNA sequence HDU - 1560(IDA*)
题目链接 题意: 题目分析: 首先注意到n的范围很小,可以得知答案序列并不会很长,直接深搜我们需要记录每一个序列正在匹配的位置,可以使用IDA* 来优化,启发函数就是当前未匹配的序列中的最大长度,这里我们假设其它未匹配序列都是最大长度的序列的子序列,故能验证启发函数的正确性 代码 #include <bits/stdc++.h> #define x first #define y second #define fi first #define se second #define pb push原创 2022-01-03 12:13:35 · 76 阅读 · 0 评论 -
Eight II HDU - 3567
题目链接 思路: 启发函数依旧是初始位置与目标位置之间的曼哈顿距离,可以用IDA* 迭代加深来做,题目让输出字典序最小的方案,所以我们可以按 d, l, r, u 搜索顺序即可,注意每次搜索要记录上次操作,避免进行与上次相反的操作 开始以为和八数码1的做法并没有区别,就按A* 来做一直T,结果换成IDA* 就过了 代码 #include <bits/stdc++.h> #define fi first #define se second #define fast ios::sync_with_s原创 2022-01-03 00:50:35 · 307 阅读 · 0 评论 -
Pots POJ - 3414(BFS+记录路径)
题目链接 思路: 结构体中建立一个路径数组,用来记录路径,满足要求输出,其他就和简单bfs一样,注意分类讨论六种操作 代码 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #incl原创 2021-12-10 22:55:30 · 114 阅读 · 0 评论 -
Fliptile POJ - 3279(状态压缩+二进制枚举)
题目链接 题意: 给你一个01矩阵,每次操作选择一个格子,使得该格子与上下左右四个格子的值翻转。 至少多少次操作可以使得矩阵中所有的值变为0? 请输出翻转方案,若没有方案,输出"IMPOSSIBLE”。 若有多种方案符合题意,请首先输出翻转次数最少的方案;若方案个数仍不唯一,则输出字典序最小的方案。 题目分析: 分析题目如果单纯爆搜的话O(2^N*M)肯定会超时,这里我们想到一些优化 首先改变前一行的1只有对下一行的同一列位置进行操作,我们由此想到,前一行的状态如果固定的话,下一行的状态也就固定的,我们可以原创 2021-12-10 21:03:49 · 509 阅读 · 0 评论 -
kuangbin带你飞]专题1简单搜索 个人向总结
题单传送门 棋盘问题 POJ - 1321 简单dfs问题,按行枚举,dfs标记每列就可以,注意回溯。 Dungeon Master POJ - 2251 第一次做三维bfs,注意下方向就行,其余还是简单bfs问题。 Catch That Cow POJ - 3278 第二次做了,记得第一次并没看出是bfs,dfs剪枝了半天,每种操作可以代表着三条线路,注意在bfs中设置一个上下限,x<0||x*2>N 剪枝。 Fliptile POJ - 3279 鸽 Find The Multiple P原创 2021-12-10 17:45:46 · 96 阅读 · 0 评论