
----- 搜 索 -----
ITCharge
高效率编程,慢节奏生活。
展开
-
HDU1078_FatMouse and Cheese【记忆化搜索】
题目大意:有个N*N格子的正方形,每个单位格子里放有0~100块奶酪。有一只老鼠站在左上角,他每次只能水平或竖直移动k步,且它只吃它当前所站的格子的奶酪和比这个格子上的奶酪多的格子上的奶酪。问:这只老鼠最多能吃到多少奶酪。思路:从左上角(0,0)开始,找到一条最长的路径,使得这条路径上满足从(Xi,Yi)->(Xi+1,Yi+1)满足map[Xi+1][Yi+1]>map[Xi][Yi],且在水平方向上或竖直方向上所走步数2不超过k。这里用dire数组来存上下左右4个方向。j*dire[i][原创 2014-11-26 15:12:17 · 1179 阅读 · 0 评论 -
POJ2034 Anti-prime Sequences【素数筛法】【DFS】
题目大意:给你三个整数 N、M、D。使得从 N 到 M 的自然数按要求排列后,相邻且连续的D 个数内的自然数和为非素数。找到字典序最小的排列并输出,如果找不到则输出"No anti-prime sequence exists."。解题思路:用深搜来做,一步一步的确定第 Cnt 个数,直到找到 M-N+1 个数,并满足要求为止。判断相邻数的和是否为非素数可以用筛法求素数事先预处理一下。原创 2015-10-29 20:27:29 · 887 阅读 · 0 评论 -
HDU1331 HDU1579 Function Run Fun【记忆化搜索】
题目大意:给一些递归条件,给你三个数a、b、c,求出w(a,b,c)是多少。思路:按题目要求递归的话会超时,所以用dp[a][b][c]来保存下递归函数的值,自底向上得出结果。原创 2015-04-08 11:03:55 · 1269 阅读 · 0 评论 -
POJ3984 迷宫问题【BFS】
题目大意:用一个5*5的二维数组表示迷宫,输出左上角到右下角的最短路径。思路:用BFS求最短路径。用pre[]来记录每个状态之前的状态,然后递归输出路径。原创 2015-05-18 13:03:30 · 3239 阅读 · 0 评论 -
UVA572 HDU1241 POJ1562 Oil Deposits【DFS】
题目大意:给你一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。思路:DFS上下左右斜方向寻找八连块。vis数组记录的是联通块的编号。若暂未搜到则为0。用dx,dy二重循环表示八个方向。原创 2014-12-11 17:47:32 · 1081 阅读 · 0 评论 -
HDU2438 Turn the corner【三分法】【数学几何】
题目大意:有一个直角拐角,给你水平道路宽度Y和竖直高度X,再给你汽车的长l,宽w问:汽车是否能通过这个拐角。思路:如果汽车的宽度大于水平道路宽度Y或是竖直高度X,无论如何都通不过。接下来考虑一般情况。如图:若汽车最左边与墙一直靠紧,则只需要判断右边最高点是否超过了Y。设θ为汽车与水平方向的夹角,s为汽车最右边的角到拐点的水平距离。那么s = l*cos(θ) + w*sin(θ) - x,从而得出 h = s*tan(θ)+w*cos(θ)。θ角从0~π/2,变化,h则从低到高再到底,且是一个原创 2014-12-17 09:34:56 · 1279 阅读 · 0 评论 -
HDU2589 正方形划分【DFS】
题目大意:有一个边长为L的正方形有L*L个小正方形,将N个小石子放在N个小正方形中,给你N个小石子所放位置,那么问题来了:能否将这个变成为L的正方形分割成N个正方形,使得每个正方形中都含有1个小石子,并且这N个正方形正好构成整个正方形。测试样例1说明:边长为5的大正方形里有8个小石子,正好能将大正方形分解成8个小正方形,且每个正方形中有1个小石子。思路:用DFS来做这道题。用Num[i][j]来表示从(1,1)到(i,j)的矩形中有多少个小石子(用来计算小正方形中含有的小石子数),用v原创 2015-02-09 10:18:47 · 1667 阅读 · 0 评论 -
POJ3009 Curling 2.0【DFS】
题目大意:一种在宽为M高为N大小的矩阵上玩的冰壶游戏,起点字符为'2',终点字符为'3',矩阵上'0'为可移动区域,'1'为石头区域。冰壶刚开始是静止的,每走一步都会选择某个方向运动,而且会沿着该方向一直运动不停,也不会改变方向,除非冰壶碰到石头或者到达终点,才会停下(这算一步)。冰壶在运动的时候,不能改变方向。冰壶碰到石头会变成静止状态,这时候石头会破裂,该区域变为可移动区域,而冰壶就可以改变方向了。冰壶一旦走到终点就不再移动。问:冰壶从起点到终点最少停多少次(走多少步)?思路:1)记录起原创 2015-04-14 17:31:39 · 903 阅读 · 0 评论 -
HDU1728 逃离迷宫【BFS】
题目大意:有一个M*N的矩阵迷宫。其中,字符'.'表示此处为空地,字符'*'表示此处为障碍。在迷宫中,只能向相邻的上、下、左、右方向走。而且在走的时候,转弯最多不能超过k次。给你初始位置(x1,y1),终止位置(x2,y2),问:是否能从初始位置走到终止位置。思路:建立一个结构体,结构体中(x,y)表示当前位置,t表示目前的转弯次数。搜索四个方向,并记录下转弯数,如果转弯数大于或等于k,则继续另外的搜索。直到搜索到终止位置,返回1。如果最后也没有搜到,返回0。原创 2015-04-05 23:22:28 · 1024 阅读 · 0 评论 -
HDU1253 胜利大逃亡【BFS】
题目大意:有一个三维立体的立方体迷宫,开始的位置为(0,0,0),离开的位置为(A-1,B-1,C-1),迷宫中0表示路,1表示墙,你只能从一个坐标走到相邻的六个坐标其中的一个。问:离开这个迷宫的最短时间是多少。思路:可以很容易的想到BFS找到最短的路径。只不过是三维的,用个二维数组存放六个方向。用队列来实现BFS。原创 2015-04-05 22:58:43 · 873 阅读 · 0 评论 -
POJ1753 Flip Game【DFS】
Flip GameTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 27221 Accepted: 11809DescriptionFlip game is played on a rectangular 4x4 field with two-sided原创 2014-01-11 22:07:43 · 5239 阅读 · 0 评论 -
HDU2209 翻纸牌游戏【技巧】
题目大意:有N张牌,有正面朝上的,也有反面朝上的,现在需要把所有牌都正面朝上,已知每翻一张纸牌,该纸牌左右两侧各一张纸牌也跟着翻动。现在给你一行只包含字符'0'和'1'的01字符串,'1'代表纸牌反面,'0'代表纸牌正面。现在需要将字符串变为全为"0000…00"的字符串,一次操作只能改变一个字符本身和它左右两侧各一个字符,问:最少要经过多少次操作,才能使字符串变为"0000…00"。如果不能翻成"0000…00"的状态,则输出"NO"。思路:可以直接想到用广搜来找最小步数。但是观察后发现可原创 2015-04-10 09:09:58 · 2327 阅读 · 0 评论 -
HDU1760 A New Tetris Game【DFS】【博弈】
题目大意:给你一个N*M的矩阵棋盘。数字0代表该位置可用,数字1代表该位置不可以。Lele和姐姐在这个棋盘上下棋,每次在棋盘上放一个大小为2*2的正方形,棋子间不能相互叠加。两个人轮流放,每次都按最优策略放正方形。轮到谁没有地方放置棋子了,就算谁输。若每次都是Lele先放,那么问题来了:Lele是否一定能赢姐姐呢。思路:博弈中的必胜态:当前所能到达的状态能到达一个必败态,则当前状态为必胜态。博弈中的必败态:若当前状态到达的所有状态都是必胜态,则当前状态为必败态。这道题和简单的取石子游戏差不原创 2015-02-11 22:30:39 · 1231 阅读 · 0 评论 -
UVA10305 Ordering Tasks【DFS】【拓扑排序】
题目大意:有n个变量,和m个二元组关系。关系(x,y)表示x<y。现在讲所有变量从小到大来排序,进行输出。例如:有4个变量a、b、c、d,若a<b,c<b,d<c,则排序后的可能为a<d<c<b,也有其他可能d<a<c<d。只要输入其中一个就可。思路:把n个变量看成是n个点,“x<y”看做是一条边,则得到一个有向图。对图的节点进行排序,使得每一条有向边(x,y)对应的x都在y前边。即所谓的拓扑排序。DFS进行拓扑排序,如果存在有向环,则不存在拓扑排序,否则就将访问完的结点假如到当前拓扑序列的前原创 2014-12-12 20:19:34 · 1195 阅读 · 0 评论 -
HDU2553 N皇后问题【回溯法】
题目大意:N*N的棋盘上放N个皇后,N个皇后不能出现在同一行,同一列或是同一斜行。思路:直接枚举判断太慢了,考虑到每行每列只有一个皇后,那么用一个数组C[x]表示第x行放置的皇后所在的列编号,即x表示行,C[x]表示列。判断是否和前边所放皇后冲突可以判断当前第cur行与之前的0~j行是否冲突。C[cur] == C[j] || cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]分别判断是否在同一列,同一主对角线,同一副对角线上。但是还可以继续优化。直接用一个原创 2014-12-16 09:26:59 · 1208 阅读 · 0 评论 -
HDU1016_Prime Ring Problem【DFS】
题目大意:由1~N的自然数组成一个环,这个环满足相邻的自然数和为素数,输出所有的情况思路:本来以为DFS会超时,结果N是小于等于20的,所以直接DFS搜索。DFS中三个变量,当前数字为now,下一个相邻的数为next,找到N个数中第几个数为x,如果相邻数相加不是素数,则不必搜下去。否则记录第x个数的结果为next。如果满足n个数,且最后第N个数与1的和也为素数就输出结果。否则就标记下当前元素,表示已经使用过,继续找第x+1个数字。最后清除标记。原创 2014-11-24 10:41:04 · 1053 阅读 · 0 评论 -
POJ1979_Red and Black【DFS】
题目大意:给你一个房间,房间由一格格砖组成,有黑砖和红砖,只能站在黑砖上,现在你站在其中一块黑砖上,且只能向相邻的黑砖上走,问:最多有多少块黑砖可以走思路:数据规模不大,直接DFS上下左右四个方向原创 2014-11-24 11:08:13 · 1091 阅读 · 0 评论 -
POJ3126 Prime Path【数论】【BFS】
题目链接:http://poj.org/problem?id=3126题目大意:给你两个有四位数字的素数 A、B,问:每次只改变一个数字,且改变前后的数都是素数,那么从 A 变到 B,最少需要多少次。解题思路:用 BFS 来做。判断素数用筛法求素数打表预处理一下,不过注意 1000 以下的数要当非素数看待。每次改变一位数字,并且如果改变后的数仍为原创 2015-10-31 18:40:47 · 698 阅读 · 0 评论