【搜索】
nyist_xiaod
这个作者很懒,什么都没留下…
展开
-
NYOJ 82 迷宫寻宝(一)(BFS)
题目链接:Click here~~又是一道迷宫问题。这次,地图中多了门和钥匙这两个元素。所以,我们只要考虑如何处理这两个新增的东西就好了。首先,在输入数据时,对于钥匙,我们可以用一个数组lock[]保存要打开这扇门需要几把钥匙,当我们遇到钥匙,就给对应的lock[]加一。而对于门,因为必须找齐钥匙才可以开,所以当我们遇到门的时候,可以先把它存到一个栈里(每个门各自对应一个栈)。原创 2012-03-07 21:29:37 · 1187 阅读 · 0 评论 -
HDU 4294 Multiple(12年成都网络赛-G题-BFS)
题目链接:Click here~~题意:找一个 n 的最小倍数 x,使 x 在 k 进制下包含最少种数字。解题思路:搜那道题解的时候有人说很类似,就趁热一起刷了。假如只有一种数字,那么我们可以在 O(N) 的时间内 check ,一共 10 种,总复杂度 O(10 * N)。假如只有两种数字,那么我们对于特定的两个数,可以依照和那道题目的思路,d原创 2013-09-30 16:55:35 · 1197 阅读 · 0 评论 -
HDU 4474 Yet Another Multiple Problem(12年成都区域赛-K题-BFS)
题目链接:Click here~~题意:找一个 n 的最小倍数 x,使 x 中不包含 m 个指定的数字。解题思路:做过一道类似的题目。由于只需要不包含指定集合中的数字,那么考虑从高位到低位枚举时,每次的选择都是互不影响的,所以设计状态 dp[mod] 表示当前余数为 mod 时的解。搜索时每位都从小到大枚举,保证了第一次扩展到的一定就是能到达这个原创 2013-09-30 13:57:38 · 1888 阅读 · 0 评论 -
ZOJ 3596 Digit Number(状态压缩 + BFS)
题目链接:Click here~~题意:找一个 n 的最小倍数 x ,使 x 中恰好包含 m 个不同的数字。(n 解题思路:首先,要理解题意中”恰好 m 个不同“不一定是 m 个数字。今天有人在群里问的这道题,想了想,果然不会做。。。搜完题解,差不多懂了,记录下。解法叫做 BFS。为什么可以 BFS 呢?直观的想法肯定是, 从小到原创 2013-06-17 19:01:16 · 1418 阅读 · 1 评论 -
ZOJ 3675 Trim the Nails(状态压缩 + BFS)
题目链接:Click here~~题意:有一个长为 m 的 ’*‘ 串M 和 一个长为 n 的包含 ’*‘ 或 '.' 的 串N,可以在任意位置进行匹配,匹配过后 串M 中同为'*'的位置会被清空。问最少多少步能使整个 串M 被清空。解题思路:由于 串M 最长20,所以可以用 dp[mask] 表示当前状态为 mask 时候最少几步能到达。原创 2013-07-13 10:00:32 · 766 阅读 · 0 评论 -
POJ 3635 Full Tank?(BFS)
题目链接:Click here~~题意:n 个点的无向图,边权值为距离,点权值为油价。你开着一辆油箱容量为 c 的坦克,从 s 到 e。问最少花费多少钱。解题思路:很容易想到状态, dp[i][j] 表示 到达 i 点剩余油量为 j 的时候的最小花费。转移好转,但是不好找到最优状态,所以要用节点存储状态,然后用优先队列,每次弹出的节点(cost 最小)一原创 2013-07-08 15:20:13 · 799 阅读 · 0 评论 -
HDU 1401 Solitaire(双向BFS)
题目链接:Click here~~题意:1个8x8的棋盘有4个棋子,棋子可以上下左右走(包括跳过相邻的一个)。给出初始状态与目标状态,问8步之内,能否到达。解题思路:一直听说有“双向BFS”这个词,今天终于学了。如果单纯从1个状态开始搜索的话,每步有16种状态需要扩展,复杂度为O(16^8),不可解。如果从2个状态同时搜,那么,每个状态只原创 2013-03-07 15:42:15 · 1232 阅读 · 0 评论 -
HDU 4171 Paper Route(树的性质+BFS)
题目链接:Click here~~题意:有n+1个点,这n+1个点由n条边相连,且保证连通。然后给出各个点到出口的距离,要求从0点出发,遍历完n个点后立刻从出口出去。求最少时间。解题思路:由于n+1个点由n条边相连且连通,所以它肯定是一棵树,而且每个点到根节点的距离唯一。从根节点出发遍历一棵树后,如果回到根节点,那么它一定走了2倍的树的边的权值之和。所以我们可以把出原创 2012-05-08 10:07:23 · 933 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone(DFS)
题目链接:Click here~~今天下午做了这道深搜题,弄了半天,终于对深搜有了初步的认识。题目大意就是给你一个迷宫,要你判断有没有一条路径,可以在时间t时恰好到达终点。搜索的魅力,无疑在于剪枝。对于这道题,可以有4种剪枝。1.如果当前搜索的深度(时间)大于时间t,中止搜索。2.如果已经搜索到结果,中止搜索。3.如果当前所剩余的时间小于从当前位置到终点的理论最短时原创 2012-03-11 21:40:49 · 870 阅读 · 0 评论 -
NYOJ 325 zb的生日(搜索解平分问题)
题目链接:Click here~~题意:有n个西瓜(n解题思路:还是看成容量为 sum/2 的背包问题,用搜索枚举所有情况,使背包中的重量尽量大。如此可得到最优解。搜索的效率取决于剪枝。而剪枝一般有两种,可行性剪枝与最优性剪枝。可行性:如果将物品装入背包后,费用超过容量,则不将它放入背包。最优性:1、如果背包已经装原创 2012-07-06 08:39:30 · 2239 阅读 · 2 评论 -
HDU 1501 Zipper(DFS)
题目链接:Click here~~题意:给你a、b两个串,问是否可以不改变它原来的顺序,插入形成c串。解题思路:以c串为准,从前向后搜,注意标记搜索过的状态即可。#include #include char a[205],b[205],c[405];bool vis[205][205];bool yes;void dfs(int loc_a,int loc原创 2012-05-07 10:08:53 · 993 阅读 · 0 评论 -
NYOJ 503 & HDU 2199 解方程(二分)
题目链接:Click here~~二分查找。注意精度。#include #include double f(double x){ return 8*pow(x,4) - 7*pow(x,3) + 2*pow(x,2) + 3*x + 6;}double Binary_Find(double left,double right,double y){ w原创 2012-03-24 13:37:00 · 837 阅读 · 0 评论 -
ZOJ 3516 Tree of Three(DFS)
题目链接:Click here~~题意:给一棵树,有n个节点(编号:0~n-1),每个节点有一个权值,0为树根,找出某个节点所在子树的最大的3个值。解题思路:树根已经确定,所以问题也变的比较简单,只需要先确定叶子节点的最值,依次向父节点传递影响,直到根节点。则很容易想到用深搜来实现。#include #include #include #include #defin原创 2012-05-10 21:28:58 · 954 阅读 · 0 评论 -
HDU 1045 Fire Net(DFS)
题目链接:Click here~~和这届蓝桥杯的一道代码填空题很相似。题意:在一个方格中,放置尽量多的大炮,大炮如果在同行或同列,中间必须有墙相隔。解题思路:深搜不解释。#include char map[5][5];int n,ans;bool leagal(int x,int y){ bool have; have = false; map[x][原创 2012-05-21 10:39:05 · 825 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese(记忆搜索)
题目链接:Click here~~题意:在n*n的格子上,每个点各有若干块奶酪,胖老鼠从左上角出发,每次最多走k步(只能直走),且下一点必须比这一点的奶酪多,问最多能吃到多少块奶酪。以前做过一道记忆搜索的题,叫skiing。好久不写深搜,犯了个很2的错误,把mmax声明成全局的了,WA了n次,rbl。#include #include #include us原创 2012-07-04 10:51:43 · 1939 阅读 · 0 评论 -
NYOJ 284 坦克大战(BFS)
题目链接:Click here~~好累啊,写篇博客歇歇。题目背景很有趣,是大家小时候经常玩的坦克大战,哈哈。弱弱地表示本人小时候经常玩游戏机。此题是在迷宫问题的基础上做了些改动,就是地图上能走的点可能耗费时间1,也可能耗费时间2。那么,元素在出队列时,不能简单的按照以前的入队顺序出队了,而应该让时间最短的先出队,这样就能够保证先入队的点一定是时间最短的,那么搜到终点时也时间原创 2012-03-07 21:03:58 · 1164 阅读 · 1 评论 -
二分查找
/* 形如:for(int i=0;i<n;i++) if(f(i) >= c) //其中,f 为 i 的函数,c 为与 f 无关的量,大小于符号可以任意. break; 都可以写成二分的形式,将O(N)的复杂度降为O(logN).*/int Binary_Search(int *a,int l,int r,翻译 2012-07-21 15:05:18 · 4451 阅读 · 0 评论