高级搜索
_pkm_
love coding
展开
-
HDU3309Roll The Cube( = = BFS )
题意:同时控制俩个球,把他们移动到洞里 当两个球重合时,只要一个球在洞里,那么另一个求解可以从这里经过,还有就是两球是同时运动的#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#include<queue>#include<set原创 2015-08-07 16:48:46 · 532 阅读 · 0 评论 -
HDU4101 Ali and Baba (bfs+dfs+博弈)
题意: Ali 和Baba玩游戏,游戏是在给出的一个n*m的图中,有且仅有一个宝藏(-1)表示,图中其他位置可能是空地(0表示),也可能是石头(石头的HP用一个正数表示)。二人轮流,每次游戏开始都是Ali先手,选手可以攻击石头,每次可以让石头HP减少一。问Ali是否可以胜利。 开始时,直接BFS 宝藏能扩展的最大的面积,因为面对都是1包围的-1 ,这个是必败态。但是WA了;然后想了很久,想到,可能原创 2015-08-03 17:31:56 · 754 阅读 · 0 评论 -
HDU 3839Ancient Messages(BFS + 连通块,判图形)
题意:给你一张图, 输出图里包涵的图形。 题目给出的图所围成的连通的白色块是不一样的,根据这个来判断#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#include<queue>#include<set>#include<sta原创 2015-08-05 17:56:49 · 912 阅读 · 0 评论 -
HDU 2614 Beat (DFS)
题意: n*n的图,a[i][j]:表示做完i题目在做j题目需要耗费的时间,每次选择的题目耗费时间要不小于之前的,问最多能做几题#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#include<queue>#include<set>原创 2015-08-07 11:04:13 · 464 阅读 · 0 评论 -
HDU1685Booksort(IDA* 搜索)
题意:有一段书编号1-n,初始状态是乱序的,问是否可以再4步操作内让他有序,每次的操作可以任取一段连续的书插在任一位置。 黑书169上的例题,第一次接触IDA*,慢慢理解#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#includ原创 2015-08-06 22:23:24 · 647 阅读 · 0 评论 -
HDU 2437 Jerboas (DFS + 同余剪枝,建图细节)
题意:n个顶点,m条边,有边权的图,每个点是有P,T标示区别的,现在要从s出发到顶点标示为p的点,要求路径最短,多解的话,要到达的顶点编号最小,无解是-1.剪枝:如果多次到达一个顶点的话,而且余数又相同,那么保留距离小的。 建图:如果用vector G[maxn];会超时。应该是边过多, 所以应用vector< vector >G;#include<iostream>#include<cst原创 2015-08-08 14:39:03 · 688 阅读 · 0 评论 -
CF Cleaner Robot (BFS)
J. Cleaner Robottime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputMasha has recently bought a cleaner robot, it can clean a fl原创 2015-10-20 15:45:34 · 1114 阅读 · 0 评论 -
CF 585B Phillip and Trains(预处理+BFS)
题意:S表示人物的初始位置,每次人先向右边走一个单位,在选择向上,向下,或者不动,然后车会向左移动2个单位,现在问人时候能到最右边。 思路:先预处理,每一个时刻,地图的状态,然后跑一遍BFS#include<bits/stdc++.h>using namespace std;const int maxn=103;const int inf=1<<28;#define LL long lon原创 2015-10-15 08:39:19 · 611 阅读 · 0 评论 -
Educational Codeforces Round 1 E. Chocolate Bar(记忆化搜索)
题目链接 题意:在n*m的矩形切出面积是k 解法:记忆化搜索#include<bits/stdc++.h>using namespace std;#define LL long long#define pb push_back#define X first#define Y second#define cl(a,b) memset(a,b,sizeof(a))typedef pa原创 2015-11-18 10:06:39 · 421 阅读 · 0 评论 -
FZU 2092 收集水晶 (记忆化搜索)
题目链接 记录下dfs的参数状态,dfs表示在t时刻,一个在x1,y1,一个在x2,y2可以收集的最大的水晶数量#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<vector>#include<queue>#include<iostream>using namespace std;原创 2016-04-14 18:26:53 · 354 阅读 · 0 评论 -
POJ 1985 Cow Marathon(树的直径)
题目链接 题意:给出一棵树,求出这个树的直径 解答:任选一点进行dfs,会找到一个最远点s,在以这个最远点s进行dfs,会找到一个最远点是t,那么s-t就是树的直径。//#include<bits/stdc++.h>#include<cstdio>#include<algorithm>#include<vector>#include<cstring>using namespace st原创 2015-11-03 17:20:15 · 357 阅读 · 0 评论 -
Codeforces Round #328 (Div. 2) D. Super M (树的直径,虚树的直径)
题目链接 题意:在一棵树上有几个关键点,现在要把这几个点都遍历一遍,问最小的开销 解答:先用一颗子树T,使得这个子树能够包涵所有的关键点,然后我们知道,如果从一点出发遍历完所有点在回到该点那么路径就是2倍的边的个数,假若我们不再回到起点,那么可以减少走的路径,这么才能使得这个路径减少的最多,就是选择2个点,使得,这两个点之间的距离是树的直径,那么以这两个点任何一个为起点,就可以,2次dfs可以求原创 2015-11-03 21:00:44 · 560 阅读 · 0 评论 -
HIHO #1312 : 搜索三·启发式搜索
题目链接A*搜索入门,这个文章讲解的很清晰了,Here hiho里面讲解的也很清楚 经典的八数码问题,在搜索的时候把棋盘当前的状态,看做一个1-9的排列(我把0换成了9),但是要对于每一个排列进行排重, 有一个比较好的方法是 康拓展开,及其逆展开,可以计算一个排列在形成的所有排列中的名次,以及给出一个名次,还原出这个排列。剩下的就是A*搜索 主要是bfs,然后加上剪枝,即F函数 G:表示出起原创 2016-08-30 08:03:53 · 519 阅读 · 2 评论 -
Codeforces Round #368 (Div. 2)(D. Persistent Bookcase 离线 转化DAG)
题目链接给出n*m的书架,4种操作 1,x,y,如果(x,y)空,该位置则放一本书 2,x,y,如果(x,y)不空,该位置拿走一本书 3,x, 把这一层有书的拿出,没书的放上书,即反转 4,x, 返回到第x操作后的书架的状态初始书架是空的,要注意一点的是,题目可能在没书的地方拿书,有书的地方放书,明显这样的操作是不成功的,没影响的,所以要标记一下。麻烦的是第4操作,无法记录每次操作的原创 2016-08-21 11:09:46 · 334 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date (A* 第k短路)
题目链接给出n个点,m条边的有向图,问s到t的第k短路长度。使用A*进行计算,每次不判重,把每一个点的相邻的所有状态加入到扩展集合中,判断t出队的次数为k就是k短路。 这里的 A *的H函数我们用单源最短路径计算从t到每个点的最短距离,因为是有向图计算的时候把图反向一下。注意:当s==t的时候,k需要加以1。//#include<bits/stdc++.h>#include<iostream>#原创 2016-08-31 09:51:59 · 298 阅读 · 0 评论 -
HDU3533Escape(BFS )
题意:要从(0,0)到(n,m)点,有四个移动的方向,初始时有一个能量,走一步消耗一个单位,能量为0还没到就是失败,同时,地图上有敌军的炮台,告诉你炮台的射击方向,这个方向是固定的,以及它每隔t秒朝该方向发射一个速度是v的炮弹,然后是炮台的坐标, 1.炮台可以挡住子弹,而不会被摧毁 2.炮弹对人的伤害只有人和炮弹在格点相遇 3.人物可以选择在某一个点停留一段时间 输入: n,m,k,d(n原创 2015-08-03 10:43:35 · 890 阅读 · 0 评论 -
HDU 2821Pusher(DFS )
题意:是一个游戏,可以玩下,就很清楚了,给你有箱子的图,你现在选择一个初始位置,并确定推的方向序列,规则:你要和箱子至少有一个空格才可以推,每次是先拿掉一个箱子,再把剩余的箱子(如果还存在的话)推向下一格,选择一个方向后要一直沿着这个方向走到不能走为止。#include<bits/stdc++.h>#define cl(a,b) memset(a,b,sizeof(a));#define LL原创 2015-08-02 09:25:10 · 848 阅读 · 1 评论 -
HDU1195Open the Lock( BFS )
题意:开锁,给出了密码的初始状态,和目标状态,这里密码是固定的四位,每次可以把某一位加一或者减一,再者交换相邻的两位,最左边与最右边是不相邻的解法:BFS,实现操作的函数即可#include#include#include#include#include#include#include#include#include#define cl(a,b) memset(a,b,s原创 2015-08-08 21:37:33 · 567 阅读 · 0 评论 -
HDU1067 Gap( BFS+ HASH 剪枝,矩阵用一个数表示)
题意:在4*8 的图中,给你4种类型的牌,每种牌序号1-7,比如42表示第4种牌的第二张,现在给你4*7一共28张,同时最左边的一列开始空的,第一步你要做的是把每种类型的1号牌从上到下放在这列空的位置上,然后在新出现的空位置,你要挑选空位子左边的那张牌的后继,如果没有的话,就不能操作。 解法:题目的状态很多,还有要怎么表示一个状态已经搜索过了呢。那就把矩阵做一下转化,把当前矩阵按行展开,以2为基数原创 2015-08-07 22:25:22 · 1017 阅读 · 1 评论 -
HDU2181哈密顿绕行世界问题(DFS +路径输出)
题意:从某个点出发,经过所有点一遍,再次回到该点#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#include<queue>#include<set>#include<stack>#define cl(a,b) memset(原创 2015-08-08 01:24:52 · 486 阅读 · 0 评论 -
HDU2102 A计划 (基础BFS)
题意:中文,不解释,但是要注意一点的是,传送门后面是墙或者还是传送门,那么这条路是不可行的#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#include<queue>#include<set>#include<stack>#d原创 2015-08-08 18:35:44 · 475 阅读 · 0 评论 -
HDU3295An interesting mobile game(BFS +模拟)
题意:开锁,给出了密码的初始状态,和目标状态,这里密码是固定的四位,每次可以把某一位加一或者减一,再者交换相邻的两位,最左边与最右边是不相邻的 解法:BFS,实现操作的函数即可#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#inc原创 2015-08-09 18:37:43 · 1041 阅读 · 0 评论 -
HDU3681Prison Break(BFS+TSP+二分+dp状态压缩)
题意: n*m的图上,机器人要从F出发关闭所有的Y。同时,G是可以充电的,但是只能充一次电,机器人每走一步消耗一个单位的电,问机器人需要带的最小的电池容量是多少。 解法:看了网上的题解,是TSP问题的变形, TSP是旅行商问题,即有n个城市,两两之间均有道路相连,给出每两个城市i,j之间的道路长度Lij,求经过每个城市一次仅且一次,最后回到起点,使得经过的道路长度最短,n<=15(一般是TSP问题原创 2015-08-10 18:21:54 · 669 阅读 · 0 评论 -
POJ 1699 Best Sequence (TSP之dp状态压缩+KMP计算主串前缀匹配子串后缀)
题意:用最短的串,包含题目给出的所有的字符串; 据说可以用AC自动机+最短路,现在还不会,这次主要是对TSP问题进行练习,上一道TSP的题目 HDU3681 http://blog.csdn.net/u013167299/article/details/47402683 原始的TSP问题是要走一条回路的,即汉密尔顿回路,问题变形的话,可以不回到原点,也可以有多个原点 本题 把每个串看成原创 2015-08-11 22:30:59 · 782 阅读 · 0 评论 -
HDU 1885Key Task(bfs + 状态压缩)
Key Task Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1529 Accepted Submission(s): 631Problem Description The Czech Technical Universit原创 2015-07-31 12:05:25 · 579 阅读 · 0 评论 -
HDU 1429胜利大逃亡(续) (bfs+状态压缩)
胜利大逃亡(续)Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6469 Accepted Submission(s): 2243Problem DescriptionIgnatius再次被魔王抓走了(搞不懂他咋这么讨魔王原创 2015-07-31 10:39:23 · 558 阅读 · 0 评论 -
HDU3058Nightmare Ⅱ( 双向广搜 )
题意:在n*m的迷宫里,你从M出发每次可以走三个单位,你的女朋友从G出发每次可以走一个单位,两个怪物从Z扩展,每次可以向周围扩展2个单位(忽略周围的一切)。问最小的步数,二人能够相遇。 解法: 双向BFS,从M,G分别广搜。遇到重叠即返回,下面应用风神的框架。 双向广搜 从初始结点和目标结点开始分别作两次BFS,每次选择队列中结点少的一边进行扩展,并且检测两边是否出现了状态重合//双向广搜代码原创 2015-08-12 14:50:10 · 681 阅读 · 0 评论 -
HDU 2128Tempter of the Bone II(bfs + 保存每一步的图)
Tempter of the Bone II Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 98304/32768 K (Java/Others) Total Submission(s): 1830 Accepted Submission(s): 486Problem Description The doggie fou原创 2015-08-01 14:29:06 · 458 阅读 · 0 评论 -
HDU1664 Different Digits(bfs +数论剪枝)
欢迎参加——每周六晚的BestCoder(有米!) Different Digits Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1129 Accepted Submission(s): 290Problem Descri原创 2015-08-01 00:25:21 · 1052 阅读 · 0 评论 -
ZOJ 1136 Multiple(BFS + 数论 同余剪枝 搜索数字的倍数 )
ZOJ Problem Set - 1136 Multiple Time Limit: 10 Seconds Memory Limit: 32768 KBa program that, given a natural number N between 0 and 4999 (inclusively), and M distinct decimal digits X1,X2..XM (a原创 2015-07-31 15:10:28 · 1315 阅读 · 0 评论 -
HDU3639Hawk-and-Chicken (好题,强连通缩点,建图,DFS回溯)
题意:大家玩老鹰抓小鸡的游戏,但是大家都想做老鹰,所以老师安排一个投票,每个人不能投自己,但是可以投多个人,投票具有传递性,比如A–>B, B–>C,那么B获得A一票,C获得B一票,A一票,共计2票。现在问谁能胜出,并列的也算,输出胜出者的票数,以及升序输出,获胜的编号。 思路:由于大家投票,可能有环,所以需要Tarjan算法把图转换为DAG,然后进行搜索,但是如果缩点后正向建图,搜索时会发现,如原创 2015-08-28 13:12:11 · 962 阅读 · 1 评论 -
HDU 1043 Eight poj 1077 (八数码 启发式搜索)
题目链接 poj1077 hdu1043使用A*搜索就可以了 A*是bfs的一种优化,使用函数F做为每个节点的访问的优先级hdu的需要先判断是否有解,否则会tle,加上后跑了1000+ms poj的不用判断,也可以ac,跑了40+ms一个状态表示成一维的形式,求出除0之外所有数字的逆序数之和,也就是每个数字前面比它大的数字的个数的和,称为这个状态的逆序。 若两个状态的逆序奇偶性 相同,则可原创 2016-08-30 13:11:02 · 480 阅读 · 0 评论