![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 63
子在梦中曰
程序是蓝色的诗
展开
-
hdu 4474 Yet Another Multiple Problem(BFS)
10年成都现场赛的题目。比赛的时候一直在往暴力和数位DP方面想,结果之后搜到的第一篇题解第一句话就是:这道题就是个BFS,不是什么暴力和数位DP,orz.。广搜的话最大一个问题就是广搜的点太多了,实际上比起暴力还多了很多点,效率应该比暴力更低,那么,该怎么缩减点的数量呢?实际上对于一个数k,我们想知道给它加一个尾数a,即k*10+a能不能被n整除,我们没必要去记录k,我们需要记录的只是原创 2013-10-28 14:47:41 · 465 阅读 · 0 评论 -
hdu 1078 FatMouse and Cheese(记忆化搜索)
一道比较直白的记忆化搜索的题目。题目中的k表示横向或者竖直可以前进的距离,不能够拐弯。老鼠的出发点是(1,1)。对于老鼠从当前点能够到达的点,筛选出从这些点到达当前点所能获得的cheese的最大值。如果该点没有值,对该点进行搜索,搜索后的结果记录下来。如果有值,表示该点已经搜索过,只需要直接调用记录的值即可。不需要像一般的搜索那样标记一个点是否遍历过,因为每个点和它的下一个点之原创 2013-10-08 16:33:24 · 692 阅读 · 0 评论 -
hdu 1428 漫步校园(spfa求最短路+记忆化搜索)
这道题首先是用spfa算法求一下最短路,然后再搜索一下。这里要用到记忆化搜索,记忆化搜索我刚学,理解得很肤浅,我是这么理解的。对于A->B->C->D这样的关系,判断哪些状态可以到达D状态。如果是一般的搜索,对于A,就是先判断A能否到达B,然后是C,然后是D,完成这些之后确定A可以到达D状态。对于B状态和C状态也是如此。这样的搜索对于每一个子状态,我们需要多次计算。所谓记忆化搜索是在搜索中原创 2013-10-08 11:01:34 · 652 阅读 · 0 评论 -
hdu 3336 Count the string(记忆化搜索)
第一次查找第一个字符在串中出现的次数和位置,在第二次查找前两个字符构成的前缀的时候就不用再去逐个查找,只需要去比较第一次记录的每一个下标后面的字符,这样就可以大大减少比较的次数。不过这样写有一个缺陷,就是对于一个由同一个字符构成的字符串,比较的效率会很低。之前用这种方法做过几道处理字符串的题目,一直觉得特别好用。不过直到现在才知道,这种方法叫做记忆化搜索。#include#inclu原创 2013-10-01 16:20:00 · 543 阅读 · 0 评论 -
hdu 1253 胜利大逃亡(搜索)
因为学广搜那几天状态非常不好,所以之前对搜索几乎完全不会。现在要重新学搜索。1、代码中声明一个队列的时候是qq,开始的时候一直写成q(node)q。2、q.push(cur)是为了给队列一个最早的元素,使q.empty()判定不为空。3、q.pop()是删除队列中已经检测过的元素。4、map[x][y][z]=1。对于已经走过的格子,将其值用1标记。5、q.push(next)原创 2013-03-17 17:20:27 · 494 阅读 · 0 评论 -
hdu 2209 翻纸牌游戏(BFS+状态压缩)
看到题目的瞬间就想到了将所有纸牌的状态用二进制表示出来,20张牌刚好有大概一百万种状态,一百万种,从刚开始学BFS搜迷宫开始,差不多是我遇到的BFS里最经常碰见的状态数量了。通过位运算来实现状态的转移,然后搜索所有的状态,最快搜索到的就是结果,如果搜索完所有能到达的状态仍然没有到达目标状态的时候,输出NO。#include#include#define N 25char s[N];原创 2013-11-19 21:09:26 · 922 阅读 · 0 评论 -
hdu 4308 Saving Princess claire_(BFS)
这道题主要有两个问题。一、解决内存大小的问题,这道题需要动态申请内存,如果直接开一个5000*5000的内存,会MLE。二、题目数据有问题,我记录的cost用int提交wa,改为long long提交之后AC。但是题目保证最多5000个节点,每个节点的花费不超过10000,理论上最大花费是5*10^7,不会超int。#include#include#include#include原创 2013-11-21 14:16:04 · 633 阅读 · 0 评论 -
hdu 2531 Catch him(搜索)
很好玩儿的一道题。题目读完,麻烦的地方时怎么记录状态,开始的时候我没理解题目的意思,以为题目保证每个球员的是矩形,提交wa了两边之后重新读题才发现是一个二维的图形,什么图形都可以。所以干脆用一个数组记录状态,反正一个球员最多只占二十格,然后对于其中最小的点来标记是否到达过,之后就是普通的广搜了。#include#include#define N 105int mark[N][N],v原创 2013-11-20 20:56:07 · 652 阅读 · 0 评论 -
hdu 2216 Game III(BFS)
这道题错了很多遍,主要错在两个地方。一、不能用scanf("%c",&c)读入,这个是题目的原因,之前遇到过几次这个问题,很烦!二、我特么的没有对vis初始化!题目思路倒是很简单,一个人的状态不好记录,两个人放一块儿就很容易记录了。#include#include#define N 25int mark[N][N],vis[N][N][N][N];int m,n;int原创 2013-11-20 22:32:49 · 696 阅读 · 0 评论 -
hdu 3316 Mine sweeping(BFS)
做这道题的时候犯了三个错误,一道不难的题结果wa了很多次才A掉。一、将ans数组的初值设为0,但是在输出的时候如果ans[i][j]为0,就输出‘".",这个很二。二、每次搜索一个点的时候,应该对它周围八个点进行检查,我还是习惯性的检查了四个点。三、忘了在输出"it is a beiju!"后面双换行,这个错误贡献了很多个PE。思路很直白,对于搜到的每一个点检查周围是否有地雷,如果原创 2013-11-21 22:06:54 · 621 阅读 · 0 评论 -
hdu 3713 Double Maze(四维的BFS)
记得以前刚学广搜的时候,做了很多迷宫的问题。后来做了一道数字转换的题目,按照一定的规则改变数字,看最快多少步能转换成目标数字。那道题我用写了个广搜A掉了。当时我就在想,我做过二维和三维的迷宫问题,数字转换这道题可以看成是一维的迷宫,那应该还有四维和五维的迷宫,写法上应该差不多,不过多了一个方向,多了一个维度。这道题两个maze分开看的话每个点都可以到达多次,但是如果两个maze放在一块儿,将他原创 2013-10-16 18:58:48 · 832 阅读 · 0 评论 -
BFS小结
hdu 1026 Ignatius and the Princess I需要记录路径,别的地方就没什么难的了。#include#include#includeusing namespace std;#define N 105int mark[N][N],vis[N][N];int n,m;char s[N];int cnt;int dir[4][2]={{0,1},{1,原创 2013-11-22 13:43:43 · 621 阅读 · 0 评论 -
hdu 1026 Ignatius and the Princess I(BFS)
只需要记录路径就行了,对于花费的时间,可以用优先队列来维护。难得的1A。#include#include#includeusing namespace std;#define N 105int mark[N][N],vis[N][N];int n,m;char s[N];int cnt;int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};st原创 2013-11-22 12:33:39 · 576 阅读 · 0 评论 -
DFS小结
hdu 2181 哈密顿绕行世界问题比较直白的一个深搜。#include#include#define N 25int mark[N][N],vis[N],ans[N];int m,cnt;void dfs(int x,int t){ if(t==20&&mark[x][m]==1) { printf("%d: ",cnt++);原创 2013-11-24 04:47:51 · 673 阅读 · 0 评论 -
hdu 4431 Mahjong(dfs+模拟)
前前后后提交了十几遍,终于A掉了。在判断七小对的时候,一个牌出现四张不能当作两个对子。然后就是各种细节。#include#include#include#define N 35int flag[N],mark[N],ans[N];int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}原创 2013-11-11 00:09:38 · 528 阅读 · 0 评论 -
hdu 3345 War Chess(BFS+模拟)
大概半年前做过一次这道题,当时一直wa而且想不明白为什么会wa。今天看见了又做了一次,第一次提交选错了语言ce,换了c++后AC,然后开始怀疑为什么之前写的一直是wa。简单模拟+BFS。#include#include#includeusing namespace std;#define N 105int vis[N][N];int m,n,k;int sx,sy;in原创 2013-11-25 21:32:31 · 604 阅读 · 0 评论 -
hdu 1175 连连看(搜索)
上周实验课上学妹问我的题目,当时我顺手写了个shensou原创 2014-04-09 12:33:36 · 582 阅读 · 0 评论 -
hdu 1142 A Walk Through the Forest(spfa求最短路+记忆化搜索)
跟hdu 1428题目雷同,算法也雷同。依旧是先用spfa算法算出个点到终点的距离,然后再进行一遍搜索。不过我spfa写得还是突出一个弱。#include#include#includeusing namespace std;#define N 1005#define inf 0x3f3f3f3fint map[N][N],dis[N],dp[N],vis[N];int原创 2013-10-08 17:39:02 · 509 阅读 · 0 评论 -
hdu 1508 Alphacode(记忆化搜索)
题目中字符串的长度没有说清楚(也可能是我没看到),提交一直返回wa,改了好久。。。简单的记忆化搜索。需要注意对于0的情况要特别处理。为了方便处理,我的字符串是从1输入的,在字符串的最后我又添加了一个1.#include#include#define N 1000005typedef long long LL;char s[N];int a[N],ln;LL dp[N];LL原创 2013-10-08 19:13:13 · 751 阅读 · 0 评论 -
hdu 1426 Sudoku Killer(暴搜)
早上开这么一道题,我是多想跟自己过不去。#include#include#includeusing namespace std;#define N 11int mark[N][N];int k;char s[N];struct point{ int x,y;} a[N*N];void print(){ for(int i=1; i<=9; i++)原创 2013-11-01 09:22:44 · 466 阅读 · 0 评论 -
hdu 1455 Sticks(经典DFS)
做了很多剪枝。#include#include#include#define N 70int a[N],n,aver,vis[N];int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int dfs(int x,int sum,int pos,int f){ if(x==f)原创 2013-11-01 19:15:41 · 538 阅读 · 0 评论 -
hdu 2579 Dating with girls(2)(BFS)
同一个点可以走多次,但是最多不能超过k次。在二维的基础上扩展一维,将二维的搜索转化为三维。#include#include#includeusing namespace std;#define N 105int vis[N][N][12],mark[N][N];int n,m,k;int sx,sy,ex,ey;int dir[4][2]={{-1,0},{0,-1},{1原创 2013-11-03 03:24:57 · 528 阅读 · 0 评论 -
hdu 2717 Catch That Cow(搜索)
之前搜索是我特别讨厌的一个东西,这几天一直在学广搜,反倒学出了一点儿心得。昨天晚上比赛的时候,一道需要对搜索做出一些变形的题目我做了出来,这道题我看到的第一反应也意识到是用搜索去做。我很欣慰啊。昨天晚上没睡好,今天一天头昏眼花的,刚才觉得看题目都看错了。我好像太喜欢在解题报告前面唠嗑了……题目中将两个点的位置放在了一条线上,然后规定了点的三种移动方式,这跟一般的迷宫搜索一模一样,不过是原创 2013-04-08 18:30:02 · 646 阅读 · 0 评论 -
hdu 1241 Oil Deposits(搜索)
做的第二道深搜题,还是觉得对深搜的理解格外的肤浅,写了好长时间,连测试都通不过,最后还是用的别人的思路。hdu给出的第四组测试实例的5 5后面应该是还有个空格,我直接复制粘贴数据读取就会出错。这东西太毁世界观了,我输入字符串输入了这么多年,要是突然发现我这种输入方法是错的,那就搞笑了。#include#include#define N 105int dir[8][2]={-1,-1,原创 2013-04-09 11:46:17 · 425 阅读 · 0 评论 -
hdu 1010 Tempter of the Bone(搜索)
这是我做的第一到深搜题,写的时候参照着杭电的教学PPT还参照着别人的代码,就这还WA了四遍才通过。一个严重发育不良的开局。不过没关系,反正比这还发育不良的开局多了去了。因为是刚学,而且题目不是完全独立做出来的,就不献丑了,只说一下写代码时犯的一些错误。1、剪枝的重要性在这个题目中体现的非常彻底,刚看到题目的时候还不以为然,觉得一个7*7的迷宫运算量肯定不会大,但是事实证明,即使是我按照原创 2013-04-08 20:02:12 · 466 阅读 · 0 评论 -
hdu 2822 Dogs(搜索)
看了别人的代码才想到用优先队列,之前代码写的太少,到需要用的时候总是容易忘。第一次提交的时候可能是杭电那会儿同时提交的人多,直接给我判了超时,后来又提交了一次,984ms,勉勉强强算是过了。学着学着就忍不住觉得悲伤,我总是以一种我学习所远远不能达到的速度去发现我还有那么多东西没有学好。#include#include#includeusing namespace std;#de原创 2013-04-06 20:20:17 · 587 阅读 · 0 评论 -
hdu 2612 Find a way(搜索)
一上午都在跟这个题较劲,最后终于做出来了。刚开始我对每一个KFC进行搜索,当时心里想着这铁定是要超时的。。。。结果还真不出我所料。然后我对Y和M进行搜索,对搜索到的每一个KFC店进行标记,最后将每一个KFC店所需要花费的两个人的时间逐个相加,求出其中最小值。可能因为昨天是周五,宿舍一晚上都在打游戏,我也没法睡觉,今天状态特别不好,各种鸡毛蒜皮的bug浪费我了很多时间。最后,这道题有原创 2013-04-06 11:48:29 · 502 阅读 · 0 评论 -
hdu 1240 Asteroids!(搜索)
这道题非常无耻的一个地方:输入地图的坐标顺序和输入目的地的坐标顺序相反。卡了我好长时间,一直想不明白哪儿错了。还是广搜。今天下午做题的时候,有一个题看到题目就知道用哪种算法需要做出那些改动,一目了然。就是算法怎么写忘了,蛋疼。#include#include#includeusing namespace std;char map[10][10][10];int n;int di原创 2013-04-04 18:34:40 · 409 阅读 · 0 评论 -
hdu 1372 Knight Moves(搜索)
注意这个棋子的走法是中国象棋中马的走法。走日子格。棋盘的大小题目中已经给出了,不能超过。第二组测试数据如果没有限制棋盘的大小,最小的步数是2。#include#include#includeusing namespace std;char map[10][10];int x1,x2,y1,y2;int dir[8][2]={2,1,2,-1,-2,1,-2,-1,1,2,原创 2013-04-02 16:58:54 · 474 阅读 · 0 评论 -
hdu 1312 Red and Black(搜索)
每次需要学习新的内容的时候,我总是喜欢拖拖拖。搜索和二分匹配说好是上周就应该学完的,结果到今天才刚刚开始。这是一道非常中规中矩的题目,没有太多值得说的地方。不过写的时候发现对很多基础概念的理解不是很清晰,浪费了很多时间。#include#includeusing namespace std;struct node{ int x,y;};char map[25][25];原创 2013-04-02 16:01:33 · 444 阅读 · 0 评论 -
hdu 3419 The Three Groups(dfs)
对几种情况加了特判就过了。#include#include#define N 10int vis[N],mark[N][N][N];int a,b,c;int x,y,z;int cnt;void dfs(int t,int f,int k){ if(k==1&&f==a) x=t,f=0,k++,t=0; else if(k==2&&f==原创 2013-11-04 10:46:13 · 631 阅读 · 0 评论 -
hdu 2616 Kill the monster(暴搜)
想了许久的DP,结果直接上手暴搜就行了。。。#include#include#define N 11int a[N],b[N],mark[N];int ans,cnt;int n,m;int Min(int x,int y){ if(x<y) return x; return y;}void fun(int m,int cnt){ i原创 2013-08-16 14:55:12 · 580 阅读 · 0 评论 -
hdu 1495Legal or Not(搜索+模拟)
刚开始我以为这是一道类似于博弈的题目,还在那儿思考有没有什么办法直接推出答案,看了别人的代码才知道这题没啥好办法,老老实实的模拟才是王道。应该说是很有意思的搜索,每次根据之前的三个杯子的不同状态产生下一个状态,一直到搜索到结果或者返回-1为止。#include#include#includeusing namespace std;#define N 101int map[N][N原创 2013-05-08 20:31:15 · 549 阅读 · 0 评论 -
hdu 4848 Wow! Such Conquering!(搜索)
题意:给出一个有向图,求从1开始遍历完整个图需要花费的时间。原创 2014-07-28 10:38:51 · 807 阅读 · 0 评论