搜索算法
搜索刷题分类
Suprit
先选择一种经历,经历再造就一个人
展开
-
踩方格 OpenJ_Bailian - 4103(DFS)
这道题是一道简单的DFS遍历图问题。细节的注意问题都写在注释里了~#include <iostream>#include<cstdio>#include<algorithm>using namespace std;bool check[25][45]; //false表示未走过,false表示走过int n, ans = 0, cur = ...原创 2018-08-27 16:36:01 · 216 阅读 · 0 评论 -
Hamiltonian Cycle UVA - 775 (DFS 路径还原)
A few definitions first:Definition 1 A graph G = (V, E) is called “dense” if for each pair of non-adjacent vertices u and v,d(u) + d(v) ≥ n where n = |V| and d(•) denotes the degree of the vertex ...原创 2019-02-27 11:01:13 · 401 阅读 · 0 评论 -
蓝桥杯历届试题 包子凑数 (暴力)
历届试题 包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加...原创 2019-03-14 21:44:08 · 1679 阅读 · 2 评论 -
I - A计划 HDU - 2102 (DFS + 剪枝)
I - A计划 HDU - 2102 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置...原创 2019-03-11 18:01:03 · 500 阅读 · 0 评论 -
蓝桥杯 历届试题 地宫取宝(记忆化搜索 好题)
历届试题 地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。地宫的入口在左上角,出口在右下角。小明被带到地宫的入口,国王要求他只能向右或向下行走。走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。...原创 2019-03-21 16:05:43 · 591 阅读 · 0 评论 -
CCPC河南省赛 Childhood dream(搜索 重复性剪枝)
CCPC河南省赛 Childhood dream(搜索 重复性剪枝) 你童年时期就有一个梦想,想要加入 ACM(Association of Calculation and Magic),今天,这个机会终于 来了。但是 ACM 只想要哪些天赋异禀的人, 比如像 tourist,他们给了你一道题来检测你是否足够机智。猜一个长度为 m 数字串,总共有 n 个提示串,解释如下:8640 0A2B...原创 2019-04-15 19:54:10 · 290 阅读 · 0 评论 -
【详解】Sudoku POJ - 2676(经典问题 DFS 重复剪枝)⭐⭐⭐
Sudoku POJ - 2676 Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits fr...原创 2019-05-03 16:07:00 · 450 阅读 · 0 评论 -
【题解】Tempter of the Bone HDU - 1010 ⭐⭐【经典问题 奇偶性剪枝】
暑假的时候,小明和朋友去迷宫中寻宝。然而,当他拿到宝贝时,迷宫开始剧烈震动,他感到地面正在下沉,他们意识到这是一个陷阱!他们想尽一切办法逃出去。迷宫是一个大小为 N*M 的长方形,迷宫中有一扇门。一开始,门是关着的,他会在第 t 秒的时间打开。因为,小明和朋友必须在第 t 秒到大门口。每一秒,他都可以向上下左右四个方向移动一个点。一旦他移动了,他刚才所在的点就消失,(这意味着他不能回到他已经走...原创 2019-05-05 13:55:57 · 456 阅读 · 0 评论 -
【题解】走迷宫 CSU - 1143 ⭐⭐⭐ 【好题 二分 DFS】
走迷宫 CSU - 1143Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲。这天卡多又跑出来了,在SJTL游乐场玩个不停,坐完碰碰车,又玩滑滑梯,这时卡多又走入一个迷宫。整个迷宫是用一个N * N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度。这个迷宫可以向上走,向下走,向右走,向左走,但是不能穿越对角线。走迷宫的取胜规则很有意思,看谁能更...原创 2019-05-05 20:09:22 · 373 阅读 · 0 评论 -
【题解】Red and Black POJ - 1979 (BFS)⭐
Red and Black POJ - 1979 (BFS)有一个长方形的房间,覆盖了正方形的磁砖。每块磁砖的颜色,要么是红色,要么是黑色。一名男子站在一块黑色的磁砖上。他可以从一块磁砖移至相邻四块磁砖中的某一块。但是,他不允许在红色磁砖上移动,他只允许在黑色磁砖上移动。编写一个程序,使得他允许重复上述的移动,判断他所能到达的黑色磁砖的数量。Input输入由多个数据集组成。数据集的起始行包...原创 2019-04-30 13:16:16 · 478 阅读 · 0 评论 -
【题解】迷宫 OpenJ_Bailian - 2790 ⭐⭐ 【DFS】
迷宫 OpenJ_Bailian - 2790 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个...原创 2019-05-19 20:03:48 · 359 阅读 · 0 评论 -
【题解】 历届试题 分考场⭐⭐⭐ 【搜索 剪枝】
历届试题 分考场n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。Input第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。Out...原创 2019-05-22 16:02:39 · 252 阅读 · 0 评论 -
【题解】银联挑战赛1B 自学图论的码队弟弟⭐⭐⭐ 【递推 Dfs】
银联挑战赛1B 自学图论的码队弟弟码队的弟弟在自学图论知识,码队跟他弟弟说,如果遇到不会的问题就来找你。现在问题来了。在一个 nn 个结点(编号为 1-n1−n ),nn 条边的连通图中,每条边的权值为两个端点的权值的和。现在已知各边的权值,希望你求出各点的权值。Input输入数据共包含 n+1n+1 行。第一行为一个整数 nn 。接下来的 nn 行,每行为 33 个整数 x,y,z...原创 2019-07-26 13:09:07 · 321 阅读 · 2 评论 -
【题解】HDU6674 度度熊与数字⭐⭐【暴力】
HDU6674 度度熊与数字度熊发现,1, 3 以及 9 这三个数字很神奇,它们的所有的倍数的每位数字的和一定是自己的倍数。例如说: 54 是 3 的倍数,同时 5+4=9 也是 3 的倍数。在另一个例子 666 是 9 的倍数,同时 6+6+6=18 也是 9 的倍数。度熊又发现,除了 1, 3, 9 以外的的正整数,虽然并不满足"所有的倍数的每位数字的和一定是自己的倍数",但也存在一些数是...原创 2019-08-20 10:25:51 · 292 阅读 · 0 评论 -
【题解】codeforce1230 C. Anadi and Domino⭐⭐⭐ 【构造 暴力】
codeforce1230 C. Anadi and DominoAnadi has a set of dominoes. Every domino has two parts, and each part contains some dots. For every a and b such that 1≤a≤b≤6, there is exactly one domino with a dot...原创 2019-09-24 16:01:22 · 438 阅读 · 0 评论 -
【题解】Hopscotch POJ - 3050 ⭐⭐ 【Dfs】
Hopscotch POJ - 3050The cows play the child’s game of hopscotch in a non-traditional way. Instead of a linear set of numbered boxes into which to hop, the cows create a 5x5 rectilinear grid of digits...原创 2019-09-25 17:55:43 · 539 阅读 · 0 评论 -
【题解】Meteor Shower POJ - 3669 ⭐⭐⭐ 【Bfs 剪枝】
Meteor Shower POJ - 3669 Bessie听说有场史无前例的流星雨即将来临;有谶言:陨星将落,徒留灰烬。为保生机,她誓将找寻安全之所(永避星坠之地)。目前她正在平面坐标系的原点放牧,打算在群星断其生路前转移至安全地点。此次共有M (1 ≤ M ≤ 50,000)颗流星来袭,流星i将在时间点Ti (0 ≤ Ti ≤ 1,000) 袭击点 (Xi, Yi) (0 ≤ Xi ≤...原创 2019-09-28 15:08:39 · 685 阅读 · 2 评论 -
牛客 处女座与复读机(搜索)
最近是怎么了… 稍微带点拐弯的搜索都不会写了…这题很简单呀…略微转换一下思想, 我们定义搜索状态为s1中的a位置和s2中的b位置, 终点是as1.size(), bs2.size(), 对于增加, 删除, 改变, 因为我们一定使得改动之后的s1[a]==s2[b], 所有可以等价理解为对a, b的改动#include <cstdio>#include <iostream&...原创 2019-01-27 22:43:26 · 303 阅读 · 0 评论 -
Power Calculus POJ - 3134 (IDDFS)
https://vjudge.net/problem/POJ-3134题意:快速计算x^n,例如x^31,x2=x×x,x4=x2×x2,x8=x4×x4,x16=x8×x8,x32=x16×x16,x31=x32÷x.至少需要6次乘法,现在输入n,求至少需要多少次乘法。先说一下什么是IDDFS迭代深化搜索(itera...原创 2018-10-11 15:15:23 · 452 阅读 · 0 评论 -
马走日 OpenJ_Bailian - 4123(Dfs)
整个题可以简单理解为求有几种遍历一个图的路径,一个简单的找路径DFS就可以了,其中有两个小技巧、传参时多传一个dep(当前步数),可以很方便的判断是否已经走完(n*m)注意边界问题!//马走日#include <iostream>#include<cstdio>#include<cstring>using namespace std;...原创 2018-09-01 17:43:51 · 627 阅读 · 0 评论 -
生日蛋糕 POJ - 1190 (DFS)
一道稍有难度的Dfs题,首先仔细寻找以下搜索节点的状态,也就是求在蛋糕有n层,底层最大半径为r,最高高度为h的情况下能凑出来的最大体积接着要考虑一下搜索顺序,搜索范围和剪枝问题。顺序就好比玩七巧板,肯定是先把大的给定下来,也就是最低往上先大后小。搜索范围最大不过只有两层,上层全部是1,其余全部放在底层。剪枝的话这题中有很多可以剪枝的地方,因为数据量不是太大我只剪了几个,代码里已有注...原创 2018-09-04 17:20:36 · 460 阅读 · 0 评论 -
小游戏 OpenJ_Bailian - 2802
一个不算太难的Dfs问题,可以理解为找到一条到终点的最短路径同时记下变了几次方向。题解都写在注释里了。//小游戏#include <iostream>#include<cstdio>#include<cstring>using namespace std;const int maxw = 80;char board[maxw][maxw]...原创 2018-09-03 17:03:15 · 418 阅读 · 0 评论 -
棋盘问题 POJ - 1321 (DFS)
最简单的DFS问题,以后一定要做到闭着眼睛都能够打出来。设定搜索状态为放置第cur个棋子在x,y处,目标状态为cur = k,没放置一个棋子到x,y处,下个棋子的位置就从x+1,y开始搜索//棋盘问题#include<cstdio>#include<cstring>using namespace std;bool chess[10][10], visit...原创 2018-09-17 08:34:16 · 1308 阅读 · 4 评论 -
八皇后 OpenJ_Bailian - 2754 (Dfs)
https://vjudge.net/problem/OpenJ_Bailian-2754这道题自己先写了一次,然后看了一下PKU郭炜老师的题解logn,觉得真的是相形见绌,在此就把郭炜老师的代码放一下吧。。。首先是在棋盘中发现了一些规律:两个皇后行的差绝对值和列的差的绝对值相同或在同一列就说明可以吃到然后直接用row[i]来表示i行的皇后放在row[i]列,直接一个循环就可以解决了,...转载 2018-09-07 14:57:03 · 261 阅读 · 1 评论 -
Find The Multiple POJ - 1426 (数位搜索 Dfs)
https://vjudge.net/problem/POJ-1426题意: 求出n的倍数m且m只包含0和1, 不超过20位(long long 可存下) 本来看起来还挺复杂的。。担心高精度算法———幂太大直接爆各种问题,后来发现其实很简单,数据也不大,用unsigned long long 就可以存下。但注意由于unsigned long long 的取值范围最大20位,所以要控...原创 2018-09-19 10:56:10 · 255 阅读 · 0 评论 -
Oil Deposits POJ - 1562 (DFS)
https://vjudge.net/problem/POJ-1562一道基础的DFS问题,其中牵扯到了染色的问题。与一般的城堡寻屋子问题不一样的时,屋子之间不是相邻的(存在*)。所以需要先写一个枚举,找到一个屋子就Dfs与之相邻的所有@。注意初始化和边界问题。//Oil Deposits#include<cstdio>#include<cstring>...原创 2018-09-20 17:41:16 · 313 阅读 · 0 评论 -
【算法笔记】深度优先搜索(DFS)
算法基础深度优先搜索(depth first search,简称深搜)是一种极其常用的算法,简单来说,符合以下策略的就可以称为深度优先搜索。在图中行走,没有走过的点称为“新点”,所有走过的点称为“旧点”。开始时所有的点都是新点,从任意节点1出发,走向任意一个新节点,同时将新节点标记为旧节点,然后重复此步骤。如果发现不能再走到下一个新节点,则回退到上一个走过来的节点,重复此步骤,直至可...原创 2018-10-03 10:44:11 · 947 阅读 · 0 评论 -
哈密顿绕行世界问题 HDU - 2181 (DFS)
https://vjudge.net/problem/HDU-2181最近写Bfs写的有点多, 猛一下拿到这题就用BFS来写了, 写到后面发现越写越麻烦.其实就是一道简单的Dfs题目, Dfs的图储存方式通常有两种: 邻接矩阵(bool数组表示通路), 邻接表(用vector来表示该节点相邻接结点)这道题目比较简单, n也不大, 我直接就用了邻接矩阵来表示代码如下//哈密...原创 2018-10-03 10:47:42 · 567 阅读 · 0 评论 -
Poj百练 1724: Roads (DFS 剪枝)
题意: 编号1-N的N个城市, 城市间有R条单向道路, 每条道路连接两个城市, 有长度L和过路费T两个属性. 当前有K元, 求从1走到N的最短路径长度, 如果到不了输出-1.题解:这道题可以学东西到一个剪枝的思想:对于一些深搜问题,如果直接遍历所有的路径的话,由于时间复杂度难以估算,所以很可能会超时,而一般需要用到“剪枝”的思想,就是把可以提前通过某些状态预判的情况提出来,直接跳过...原创 2018-08-22 17:00:25 · 527 阅读 · 0 评论 -
ZZULIOJ 2504: 建国的签到活动二 (BFS | DFS)
小技巧: 50以内的数据量, 又是求最值和所有可能, 一定是搜索没错了. 搜索的话求一个解用Dfs, 求最优解(遍历所有解)用Bfs, 这道题我用了Bfs()这道题目有一个小问题就是只有当确定了连续的天数才知道可获得的积分, 而不是一天对应一个积分, 所以我们在迭代积分时要注意只在最后已经确定连续的天数后再加上对应积分(代码中1, 2处), 遍历求最大值#include &lt;cstdio...原创 2019-01-14 21:58:55 · 329 阅读 · 0 评论 -
Pots POJ - 3414 (广搜 + 路径输出 + 倒水问题)
https://vjudge.net/problem/POJ-3414.大概看了一下, 倒水问题 + 路径输出, 杯子不多就两个, 方法不多就3个, 范围不大就100, 所以总体看起来不算太难这里我用了vector加head和tail来模拟队列, 因为用queue的话一旦pop出去的点就再也找不回来啦, 谈何路径输出, 所以看到路径输出, 就要想到用数组或者vector本来1个小时...原创 2018-10-09 21:03:55 · 600 阅读 · 0 评论 -
非常可乐 HDU - 1495 (BFS || 数论)
https://vjudge.net/problem/HDU-1495倒水问题,开始一看还没读懂题。注意题中所指出的没有刻度这个问题,如果没有刻度的就只能有两种倒发:要么全部倒给另一个杯子,要么把自己的倒完。(这两个可能可以合并为一个算法)那其实就是搜索问题了,求最优解当然用广搜,两个for循环表示第i个杯子到给第j个杯子。//非常可乐#include<cstdio>...原创 2018-09-28 15:10:55 · 1714 阅读 · 4 评论 -
Find a way HDU - 2612 (BFS)
https://vjudge.net/problem/HDU-2612稍微有一点复杂的Bfs题目,但仔细想一下其实可解的思路挺多的。比方可以用双向广度优先搜索,我比较懒,用的是两个广度优先搜索,把每个kfc的路径都存着,然后找出最小的,因为数据不大也没有优化,有想法的同学可以尝试一下。尤其要注意M,Y,@也是可以当做路来走的。同时也要注意边界条件和初始化问题。//Find a w...原创 2018-09-20 21:30:35 · 620 阅读 · 0 评论 -
迷宫问题 POJ - 3984 (Bfs 路径还原)
也是一道极其经典的广搜题目,虽然深搜也是可以写的,但是求最优解的问题还是用广搜合适咯!广搜问题经常使用队列(queue,deque)来实现,但这道题不行。。因为你直接把一个顶点给pop掉的话,就再也找不回来了呀!救没办法来通过指针来找回上一个节点了。我用了一个数组来模拟队列,加以head和tail两个int表示头尾的下标。总结一下, Bfs路径还原的关键两点:1. 添加last...原创 2018-09-18 21:12:32 · 1086 阅读 · 2 评论 -
Catch That Cow OpenJ_Bailian - 4001 (BFS)
题意: x坐标系上, 人在n点, 一头牛在k点, 人有两种走法 1. x+-1 2.x*=2, 求抓到牛的最小步数 直接一直感觉深搜和广搜没什么区别,所以就只学了深搜,觉得很多题目深搜也就够了吧。昨天才发现有些题目的话,用深搜是会炸的,大部分都是求最优解或最短路径的问题。因为深搜需要不断地前进->回溯,而广搜一边下来有时候可能没完就已经找到答案了。这道题目是一题基础的广...原创 2018-09-18 14:02:24 · 349 阅读 · 0 评论 -
【题解】牛客 Numbers⭐⭐ 【Dfs】
牛客 NumbersInputOutputFor each test case, print an integer which denotes the result.Examples输入复制9992333330123456789输出复制2055题意:给出一个数, 问1-99有几种方案组成他题解:数位简单Dfs#include<bits/stdc+...原创 2019-10-02 15:36:35 · 207 阅读 · 0 评论