搜索
文章平均质量分 78
404-unkown
这个作者很懒,什么都没留下…
展开
-
POJ1321----棋盘问题
题目大意:中文题…. 分析:逐行深搜代码:#include <cstdio>#include <cstring>using namespace std;char G[10][10];int n, k, ans;int vis[10];void dfs(int r, int cnt) { if(cnt == k) { ans++; return;原创 2015-03-08 16:12:11 · 371 阅读 · 0 评论 -
POJ3126--Prime Path(BFS)
题目大意:给定两个四位的素数a,b,要求把a变换到b。变换的过程要保证 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数与前一步得到的素数只能有一个位不同,而且每步得到的素数都不能重复。求从a到b最少需要的变换次数。无法变换则输出Impossible分析:BFS。用埃氏筛选法,预处理出10000以内的素数,作为剪枝。代码:#include #incl原创 2015-09-02 17:48:03 · 339 阅读 · 0 评论 -
hdu5400--Arithmetic Sequence
题目大意:给出一个数列,求有多少个区间[l, r]满足,存在一个i,l ,使得j (l <= j ,b(j+1) = b(j) + d1,并且j (j ,b(j+1) = b(j) + d2分析:暴力搜索就行。flag表示从这一次开始搜的位置,到现在这个位置都满足要求。中间这些区间就相当于等差数列求和。代码:#include #include #in原创 2015-08-18 23:33:51 · 285 阅读 · 0 评论 -
小晴天老师系列——可恶的墨水瓶(floodfill)
题目大意:找出最大的8连通块 分析:dfs。。。对每一个访问过的顶点要标记一个vis来避免重复访问,同时要避免越界,可以考虑在格子的周围绕一圈0来进行隔离。这个算法名字叫floodfill,洪水填充法?代码:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int m, n, g[25][25原创 2015-07-17 21:07:45 · 485 阅读 · 0 评论 -
Circle vs Triangle(DFS+博弈)
题目大意:在一个棋盘上,Alice和Bob两人轮流放棋子,Alice先手,问Alice是否必胜分析:首先介绍一下博弈的思想。对于1VS1的棋类游戏而言,如果这一步我有必胜策略,那我就可以必胜;如果无论我这一步怎么操作,对方都有必胜策略,那么我就必败。注意前一句的条件是“存在”,后一句是“任意”。这两句话构成了博弈论的基石。然后,就可以DFS搜是否存在必胜策略即可。代原创 2015-09-05 12:41:49 · 381 阅读 · 0 评论 -
DFS专题--Hand in hand
题目大意: n个人,每个人左手右手各有一个数字,围成圈,拉着的两只手的数字要求互质,求情况总数。分析: 两种解法。一、由于是围成一个圈,所以,先固定一个人的位置,对另外n-1个人进行全排列,判断是否互质。二、DFS搜。 注意,n=1时,答案为0。T^T….没考虑这个,找了半天没找出错误….代码://方法一、next_permutation#include <cstdio>#include <c原创 2015-06-17 21:00:43 · 431 阅读 · 0 评论 -
哗啦啦族的24点游戏(DFS)
C - 哗啦啦族的24点游戏Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)Submit StatusProblem Description哗啦啦族的小Q是一个狂热的24点爱好者,24点就是给你一串数字,问你是否通过加减乘除括号构成24点。唐原创 2015-09-05 13:46:46 · 1037 阅读 · 1 评论 -
哗啦啦族的加法计算(DFS)
D - 哗啦啦族的加法计算Time Limit: 12000/6000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)Submit StatusProblem Description 小彭玉今天开始学习加法啦!唐老师写了个加法等式,小彭玉扑通扑通就凑出来了一种合法解唐老师又写原创 2015-09-06 09:39:07 · 426 阅读 · 0 评论 -
哗啦啦族的01背包问题(折半枚举)
E - 哗啦啦族的01背包问题Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)Submit StatusProblem Description背包背包!唐老师非常开心的在给小彭玉讲背包问题,“01背包就是在M件物品取出若干件放在空间为W的背包里原创 2015-09-06 09:29:18 · 600 阅读 · 0 评论 -
hiho1233--Boxes(BFS)
题目大意:有n个盘子,n个柱子,每个柱子上都有一个盘子,任意两个盘子大小均不相同,一个盘子可以移动到相邻的柱子上,且必须比该柱子最上方的盘子要小,问最少移动多少次后,盘子从小到大依次摆在每个柱子上。分析:首先,最少步的问题,说明,要用BFS。 其次,多个起点,固定终点,说明,可以预处理,反向BFS。 然后,就是考虑如何表示状态了。由于一个柱子原创 2015-09-29 21:54:34 · 301 阅读 · 0 评论 -
大臣的旅费(求树的最远点对,即树的直径)
题目大意:求树上两点的最远距离。分析:可以用DP解,也可以用两次DFS。这里我用两次DFS,树上最远的点对一定是树的直径,而且树上其他点到树的直径某一端点肯定是最远的,第一遍搜找到直径的某个端点,第二次就可以找出来树的直径了,然后就找到了最远的点对啦。关键在于,理解树上任意一点搜一次的最远点一定在直径的某个端点上。Code:#include #include #in原创 2016-03-16 14:48:50 · 494 阅读 · 0 评论 -
HDU5025--Saving Tang Monk(BFS)
题目大意:孙悟空去救唐僧,要集齐m把钥匙才能救他,要得到第二把钥匙就必须先拿到第一把,以此类推。路上还有至多五条蛇,必须杀死蛇才能继续前进,每次杀死一条蛇,消耗一个单位的时间。另外,每前行一格,也要耗费一个单位时间。求最短时间。分析:带限制的BFS。一般做这种题,就是增加vis数组的维数,使其能够正确表示当前的状态。这里需要记录的有是两个坐标,还有当前钥匙的情况,和杀死哪些蛇的情况。所原创 2015-08-30 14:38:15 · 398 阅读 · 0 评论 -
ZOJ3811--Untrusted Patrol(DFS)
题目大意:给出n个点,m条边,k个传感器放在k个点上,按一定顺序经过L个传感器,每个传感器只能经过一次,问能够按这个顺序经过这L个传感器,并且遍历到每个点。分析:DFS。首先,如果L不等于k的话,则说明有某点没有遍历到,答案自然是No。接着,从第一个位置的传感器,开始深搜,当搜到一个新的传感器时,停止这条边搜索,并将这个新的传感器记录为已访问。然后,再按顺序搜下一个传感器,如果,这个传原创 2015-08-29 12:19:13 · 482 阅读 · 0 评论 -
POJ1979---Red and Black
题目大意:求可以达到的格子总数分析:DFS代码#include #include using namespace std;const int maxn = 25;char G[maxn][maxn];int w, h, vis[maxn][maxn];int sc, sl, ans;int dl[4] = {0, -1, 0, 1};int dc[4] = {1, 0,原创 2015-03-08 11:32:04 · 446 阅读 · 0 评论 -
POJ3009---Curling 2.0
题目大意:投掷一个冰壶,直到遇见障碍物才停下,停在障碍物前面,然后障碍物消失,继续投掷,直到达到终点,投掷不超过10次,求最小投掷次数 分析:DFS。剪枝1,超过10次,很重要,不然TLE。剪枝2,超过最小值。 代码:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int ma原创 2015-03-08 15:04:02 · 413 阅读 · 0 评论 -
POJ2488---A Knight’s Journey
题目大意:马步行走,使其能够遍历全图,字典序输出 分析:DFS。要求字典序输出,所以,辅助数组的初始化,需从左至右初始。代码:#include <cstdio>#include <cstring>using namespace std;const int maxn = 31;int vis[maxn][maxn], path[maxn*maxn][2];int dx[8] = {-2, -原创 2015-03-08 16:21:28 · 570 阅读 · 0 评论 -
POJ2718---Smallest Difference
题目大意:输入一串数字, 将其分为两组,每组随机搭配,组成一个整数,整数的不能以0开头,除非只有个位,求两个整数差的最小值 分析:DFS暴搜掉。很容易想到一个整数的位数为n/2,另一个为n-n/2时,差最小,所以,用next_permutation枚举。特殊情况需要注意,只有两个数字且其中一个为0,没注意这个,贡献了两个WA,晕死代码:#include <cstdio>#include <cst原创 2015-03-09 23:03:13 · 617 阅读 · 0 评论 -
POJ3187---Backward Digit Sums
题目大意:给出杨辉三角的行数N,和顶端值M,求最底层1~N怎样排列才能使顶端值M。输出字典序最小的组合 分析:先求杨辉三角底层各个数的系数,然后,DFS就可以得到答案代码:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int a[15], n, cur, k, flag, vis[15],原创 2015-03-10 15:06:00 · 357 阅读 · 0 评论 -
百练4980--拯救行动(BFS)
题目大意:给一个迷宫,骑士救公主,经过一个格子,耗费一个时间,路上有守卫,杀死守卫要耗费一个时间,也就是有守卫的格子要花费两个时间,求最短时间,如果不能,输出Impossible。分析:BFS。在遇到有守卫的格子时,不能直接加两个时间,而是要把这个格子当做两个格子来走。因为,这样得出最短路不一定是最短时间,比如,你正前方有三个守卫,你要走到正前方第四个格子,走直线的话,花费的时间就是7,假设旁原创 2015-07-26 19:44:02 · 3449 阅读 · 2 评论 -
百练6044--鸣人与佐助(BFS)
题目大意:又是迷宫啊迷宫啊。鸣人救佐助,一开始手上有一定数量的查克拉,路上遇见大蛇丸的手下,需要耗费一个查克拉杀死对方,才能继续走,然而鸣人能够瞬杀,不耗费时间,只消耗移动距离的时间。没有查克拉,就要避开大蛇丸的手下咯。求最短时间,不能就输出-1。分析:BFS。每个格子需要记录三个数据,横纵坐标,以及查克拉数量,如果当前查克拉数量,不超过之前经过时的查克拉数量,那就不用走这一步,否则,仍然可以原创 2015-07-26 20:58:29 · 3131 阅读 · 2 评论 -
POJ3411--Paid Roads
题目大意:有n个城市,m条路,每条路有五个信息,出发城市a,达到城市b,如果之前到过城市c,那么这条路的费用就是p,否则费用为r。求从城市1到城市n的最小花费。 分析:直接暴力深搜。当然,要带上一些剪枝。首先是,可行性剪枝,对于一个路为m条的图,每个节点的到达次数的上限为m/2,否则就会进入一个循环圈(m=1时除外)。接着是最优化剪枝,如果当前的总花费比已经算出的最小花费还大,那么也可以剪原创 2015-08-28 11:46:01 · 530 阅读 · 0 评论 -
HDU5024--Wang Xifeng's Little Plot(DFS)
题目大意:给出一个图,只能在图上拐一次弯,而且必须是90度,问求最长路分析:暴力dfs。枚举所有可以走的点。代码:#include #include #include #include using namespace std;const int maxn = 111;char g[maxn][maxn];int dx[8] = {0, 1, 0, -1原创 2015-08-30 01:21:14 · 345 阅读 · 0 评论 -
ZOJ3816--Generalized Palindromic Number(DFS)
题目大意:定义一种叫做广义回文数的数,就是把一串数字相邻的数字合并之后,如果是回文数,就是原串为广义回文数。例如,1121,合并之后是121,那么1121就是广义回文数。给出一个N,求小于N的最大广义回文数。分析:搜了几篇题解之后,才知道可以直接暴力dfs。根据回文的对称性,先从大到小枚举左边的数,然后,右边就可以与之匹配相对应的数。代码:#include #in原创 2015-08-29 19:16:44 · 303 阅读 · 0 评论 -
POJ3050--Hopscotch
题目大意:给出一个5*5的矩阵, 从任意一个点出发,可以往四个方向走,可以重复走, 走六次。可以得到多少种不同的排列。 分析:题目数据貌似不强。暴力DFS就可以过。代码:#include <cstdio>using namespace std;int a[6][6], c[100000], ans, cnt, flag;int dx[4] = {0, 1, 0, -1};int dy[4]原创 2015-03-10 15:36:32 · 337 阅读 · 0 评论