DFS
文章平均质量分 75
paradiserparadiser
中国地质大学(北京)CS专业......ACM/ICPC酱油一瓶
展开
-
Poj Sum It Up
题意:给出一个目标数t,个数n,以及n个正整数,求出n个数中可能组成的和等于t. , n个数字可不全用。Sample Input4 6 4 3 2 2 1 15 3 2 1 1400 12 50 50 50 50 50 50 25 25 25 25 25 250 0Sample OutputSums of 4:43+12+22+1+1Sums o原创 2012-08-07 20:39:50 · 567 阅读 · 0 评论 -
HDU 4414 Finding crosses (DFS + BFS)
题意:在N*N的图中,找出孤立存在的十字架的个数。十字架要求为正十字,孤立表示组成十字架的‘#的周围的一格再无’#‘。dfs找出在中心的‘#’(周围四格也为‘#'),则缩小了搜索范围,再bfs找出是否是符合要求。#include #include #include #include #include using namespace std;char map[55][55];i原创 2013-08-02 20:13:20 · 973 阅读 · 0 评论 -
HDU 1501 & POJ 2192 Zipper(dp记忆化搜索)
题意:给定三个串,问c串是否能由a,b串任意组合在一起组成,但注意a,b串任意组合需要保证a,b原串的顺序 例如ab,cd可组成acbd,但不能组成adcb。分析:对字符串上的dp还是不敏感啊,虽然挺裸的....dp[i][j] 表示a串前i个,b串前j个字母能组成c串前i+j个字母。所以dp[lena-1][lenb-1] = 1; 就行了。从后往前找就很好找了,从c串最后一个字符开始递原创 2013-07-29 14:23:31 · 950 阅读 · 0 评论 -
HDU 4274 Spy's Work (树 DFS)
给定N个点,每个点都有一个唯一的前驱结点(点1为大boss),子节点的权值也归属于父节点。现在给出某些点的权值的估算(> , = , 保证每个点的权值是大于等于1的。分析: 判断标准为每个点的上下界,初始化为INF和1,每个点上下界可以根据给出的信息,或者搜索出的信息进行更新,如果出现上界小于下界的情况就说明矛盾了。计算过程中数据量竟然没有超过int................原创 2013-08-05 17:13:45 · 904 阅读 · 0 评论 -
POJ 2286 The Rotation Game (IDA*)
以下部分摘自网络:IDA*算法是A*算法和迭代加深算法的结合。迭代加深算法是在dfs搜索算法的基础上逐步加深搜索的深度,它避免了广度优先搜索占用搜索空间太大的缺点,也减少了深度优先搜索的盲目性。它主要是在递归搜索函数的开头判断当前搜索的深度是否大于预定义的最大搜索深度,如果大于,就退出这一层的搜索,如果不大于,就继续进行搜索。这样最终获得的解必然是最优解。而在A原创 2013-08-21 17:29:57 · 849 阅读 · 0 评论 -
POJ 1077 HDU 1043 Eight (IDA*)
题意就不用再说明了吧......如此经典之前想用双向广搜、a*来写,但总觉得无力,现在用IDA*感觉其他的解法都弱爆了..............想法活跃,时间,空间消耗很小,给它跪了启发式搜索关键还是找估价函数:此题估价函数可大致定性为每个数字(除去x,只要8个数字)当前位置与它期望位置的曼哈顿距离即为:v += abs(i - pos[map[i][j] - 1][0]);原创 2013-08-21 21:21:25 · 855 阅读 · 0 评论 -
POJ 3460 Booksort (IDA*)
只能这题的估价函数太神了.............黑书的思想一直很牛X题意:有一个 1--n的序列,顺序打乱了,目标是要让每个数字在对应的位置(1对应1.......),移动的时候取连续的一段与左边或者右边的某一段交换位置(一段也可以是一个数值)。分析:摘自黑书:本题和传统的八数码问题有类似之处,但是其启发函数不好找。如果也是把所有段落的曼哈顿距离作为估价值,则h函数是不相容的,一次移动可原创 2013-08-22 11:20:48 · 1079 阅读 · 0 评论 -
POJ 3321 Apple Tree (DFS + 树状数组)
题意:一棵苹果树有N个分叉,编号1---N(根的编号为1),每个分叉只能有一颗苹果或者没有苹果。 现在有两种操作:1.某个分叉上的苹果从有变无或者从无边有。2.需要统计以某个分叉为根节点时,它的子树上(包括该分叉)共有多少苹果。分析: 有两种操作,基本就是使用数据结构维护的题目了。开始想了很久,不懂如何将分叉转化为一维线性的树状数组维护。 看了下discuss,有人说了时间原创 2013-08-27 14:05:17 · 759 阅读 · 0 评论 -
HDU 4277 USACO ORZ (暴力搜索+set去重)
枚举3^15种情况,不同的三角形用set去重。先让所有段加入一条边,在逐个移动至另外两边,枚举所有的情况卡着时间过去的...........#include #include #include #include #include #include using namespace std;int a[22];int n;int sum,ans,flag;struct原创 2013-08-05 11:59:05 · 1247 阅读 · 0 评论 -
BNU 29022 Myth Busters (dfs)
题意:给定N个长度为4的字符串,字符串中只有数字,现在可以将某个字符串全排列,通过在数字之间进行加减乘除和括号5种操作,得到的值是否等于10。求出这N个字符串是否都满足条件。对于每个字符串,求出它的全排列,对于它的每一个排列,枚举两两之间的加减乘除操作,括号的优先级就用dfs枚举,这样能求出所有的情况。发现错在一个很神奇的地方,当除法操作,除数为0时,返回-INF(INF为INT_原创 2013-10-03 21:38:08 · 882 阅读 · 0 评论 -
HDU 4753 Fishhead’s Little Game (对抗搜索)
题意:在3*3的方格中,有4*4=16个点,标号分别为1~16,A、B两人轮流玩游戏,每次可以添加一条边(相邻节点),如果恰好能够凑成一个边长为1的正方形则得一分,两个的话得2分。现在给定两人已经连接的n条边后,求最终格局谁会胜。因为总计只有24条边,而且只能剩下0--12条边,所以状态压缩记录好剩下还没走好的步数,dp[i]表示状态i下,当前玩家能获得的最大分数。如何处理连边,方原创 2013-09-24 00:14:09 · 1313 阅读 · 0 评论 -
HDU 4276 The Ghost Blows Light(树形DP)
题意:给出一棵无向树,从1走到n,总时间为T,每走一条边需要花费一定时间,每个结点有一定权值,问在指定时间内到达n点能获取的最大权值。由于已经到过的点能再次返回(虽然不能再次获得该点权值),情况数倍增.....普通搜索必然爆参考大家的方法:先用某种方法跑出1到n的最短路径,如果时间限定之内,继续,因为最短路上的边只会走一遍才是最优的,多走就是多余的,将最短路的边的时间变为0,总时间原创 2013-07-30 11:12:24 · 1088 阅读 · 0 评论 -
HDU 2452 Navy maneuvers(记忆化搜索) (08年哈尔滨区域赛)
区域赛的题目读着就是蛋疼,读到一半放弃了,不过今天重新拾起。题意:有一个又向无自环的连通图,每个结点都有权值。现在有两艘船要从能到达任意结点的点出发(我的理解就是入度为零的点),直到出度为零的点,途中获得每个结点的权值(包括起点和终点)。现在这两艘船a希望得到更多的权值,另一艘b希望得到尽量少的权值。他们从起点开始,由a,b轮流领航(自然领航的人会走对自己有利的路),问到终点的权值能否满足要求原创 2013-07-25 10:45:34 · 1927 阅读 · 1 评论 -
HDU 4620 Fruit Ninja Extreme(2013多校第二场 剪枝搜索)
这题官方结题报告一直在强调不难,只要注意剪枝就行。这题剪枝就是生命....没有最优化剪枝就跪了:如果当前连续切割数加上剩余的所有切割数没有现存的最优解多的话,不需要继续搜索了#include #include #include #include #include # define MAX 33using namespace std;struct node { int原创 2013-07-31 00:28:16 · 1755 阅读 · 3 评论 -
Poj 1111 Image Perimeters
题意:理解为搜索一幅图中‘X’相连组成图形的周长(从输入中给出的点开始搜索),相连的定义则是在该点周围8个方向为‘x’。较为简单的dfs题.... InputThe input will contain one or more grids. Each grid is preceded by a line containing the number of rows and col原创 2012-08-06 19:09:08 · 826 阅读 · 0 评论 -
Coj 八皇后问题
题意:这个经典的问题题意就不用再说了。这次问题是要求:把92种解法按照一定顺序 矩阵输出。Sample OutputNo. 11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0原创 2012-08-08 16:38:02 · 516 阅读 · 0 评论 -
Zoj 2110 Tempter of the Bone
题目描述:一只小狗在一个古老的迷宫里找到一根骨头,当它叼起骨头时,迷宫开始颤抖,它感觉到地面开始下沉。它才明白骨头是一个陷阱,它拼命地试着逃出迷宫。迷宫是一个N×M 大小的长方形,迷宫有一个门。刚开始门是关着的,并且这个门会在第T 秒钟开启,门只会开启很短的时间(少于一秒),因此小狗必须恰好在第T 秒达到门的位置。每秒钟,它可以向上、下、左或右移动一步到相邻的方格中。但一旦它移原创 2012-08-13 15:48:43 · 879 阅读 · 3 评论 -
HDU 2437 Jerboas (剪枝搜索)
题意:给定一幅图,图上有两种点T,P.......一只跳鼠在一个T点作为起始点,它想通过图上的路到达某个P点,P点满足如下要求:(1).到达P点的途中路径权值为k的倍数(2).尽量让路径权值取最小(3).权值相同时,P点取更小的此题一波三折,一开始反向建图,以为记忆化搜索能过.....TLE了,以为是枚举了是P的点浪费了时间;然后正向建图,从起点开始,也是TLE了,然后发现原创 2013-07-29 18:30:26 · 1508 阅读 · 0 评论 -
POJ 3249 Test for Job(记忆化搜索)
题意:给定一个有向无环图,每个结点有权值,从入度为零的点作为起点,出度为零的点作为终点,要求出到终点时可能的最大权值(权值可能为负数,不过都不超过int)思路:记忆化搜索,很多人反向建图来做,不知道有什么好处。我还是正常顺序。事先记录好各点的入度,枚举这些点搜索出的可能最大权值。这种题目的状态转移方程还是很好分析的dp[i] = v[i] + max(dp[u0],dp[u1],.....原创 2013-07-24 15:28:24 · 1329 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese(记忆化搜索)
题意:给定一幅图,每个点有一定权值,现在有一只老鼠在起始点(0,0),他能水平或者垂直移动1~k格之后,停在某点并获得权值,而且每次移动后所在的点,都要比刚离开的那个点的权值更大,求最多能获得多少权值。分析:依旧是搜索,把条件分析清楚,dp[i][j] 表示从i,j出发能获得的最多的权值。#include#include #include #include #include原创 2013-07-29 10:44:40 · 826 阅读 · 0 评论 -
hdu 1978 How many ways(DP | 记忆化搜索)
状态转移方程:dp[i+k][j+l] = (dp[i+k][j+l] + dp[i][j]) % 10000;dp[i][j]表示到达点(i,j)的途径数, 其中k,l为处在点(i,j)时,能够到达点(i+k,j+l)。#include #include #include #include #include #include #include #include #incl原创 2013-05-27 18:13:05 · 1023 阅读 · 0 评论 -
POJ 2704 Pascal's Travels (记忆化搜索裸题)
题目明确指出量过大 ,爆搜会超时的。记忆化搜索水过#include #include #include using namespace std;char str[44][44];int map[44][44],vis[44][44];__int64 dp[44][44];int n;int dirx[2] = {0,1};int diry[2] = {1,0};void i原创 2013-07-24 13:09:31 · 1145 阅读 · 0 评论 -
poj 2922 Honeymoon Hike(二分+dfs+区间枚举)
题意:给定一个n*n地图和高度,一个人从左上角地图开始,需要走到右下角的地图,问他走的路程中所到达的最大高度和最小高度的差最小是多少。思路:二分答案,对于每一个高度差,可以用dfs或bfs检验是否能够到达目的地,一开始想法是每次传以前的最大和最小高度,然后在更新,这样重叠检验会超时,然后参考博客,需要枚举区间来优化。于是可以改枚举高度区间的办法来缩减时间。以起始点高度h,[h-mid,h]原创 2013-07-10 11:26:13 · 968 阅读 · 0 评论 -
HDU 4337 King Arthur's Knights(暴力dfs)
题意:图中有N个点,每个点至少和其他(N+1)/2个点连接,问能否找到一个有N个点的环(即不存在重复的点,N个点都在内)。分析:数据量小,直接暴力深搜,起点直接设为点1(一定能找到环 或者 环本身不存在)。#include #include #include #include #include #include #include #include #include #in原创 2013-07-12 16:26:18 · 807 阅读 · 0 评论 -
HDU 4597 Play Game (对抗搜索)
题意: 现在有两堆卡牌,每堆都为N张,每张卡牌有一定的分数,有A,B两个人,他们能从这两堆中的顶部或者底部抽出一张牌,并且拥有该分数,问当A先手时,他能获得的最大分数。用dp【t1】【d1】【t2】【d2】表示在剩下的卡牌中(第一堆为t1--d1,第二堆为t2--d2),即将抽取牌的人能获得的最多分数。怎么转移呢? 假设游戏当前所剩卡牌分数为cur, 则当前能获得的最大分数,为cu原创 2013-09-23 21:26:32 · 1137 阅读 · 0 评论