
记忆化搜索
the_conquer_zzy
计算机科学与技术专业
展开
-
hdu 1078 fatmouse and cheese
思想记忆化搜索还有的搜索方式是状态搜索状态搜索,是进行状态映射,以便得知某个状态是否已经搜索过了,是为了避免重复搜索, 状态搜索应用的场景是,简单地标记哪个点有没有走过,已经不再满足需求了。或者说,无法进行标记哪个点是否已经走过。记忆化搜索是,在搜索的过程中,会产生很多重复搜索,但是只要记住第一次搜索的结果值,可以直接用上次的搜索结果,并避免再次搜索,减少了搜索范围,避免了重复搜索。 记忆化搜索的原创 2017-07-23 20:45:44 · 420 阅读 · 0 评论 -
hdu 1224
主题思想: 我用的是记忆化搜索,网上其他人用的是求最长路径。 记忆化搜索也不难,主要是,开数组,记录结果。 ;另外,这题在输出路径上花了时间, 输出超时OLE,最后解决办法是,把一些设置为最小值的数,设置的尽可能小。要注意 dijkstra不能求最长路径, 单源最短路径SPFA算法,可以处理负权边。实现起来还算简单。SPFA算法代码:queue<int> q; int start; q.push(原创 2017-08-27 22:11:34 · 237 阅读 · 0 评论 -
hdu 1208
记忆化搜索 : 记忆化搜索的方式表现为 dfs+dp 记录已经搜索过的结果,如果搜索过,直接返回结果,否则才搜索。搜索类的题,好久没写,具体细节有些忘记了, dfs中如果需要回溯,则dfs调用后面再重新把走过的路标记为false。 比如常见的四个方向搜索for(int i=0;i<4;i++){ int xx=x+dir[i][0]; int yy=y+dir[i][1];原创 2017-08-25 21:10:12 · 287 阅读 · 0 评论 -
hdu 1195 open the lock
主题思想 : 首先读题,求最小值,一旦出现求什么最小路径,最小值之类的,考虑BFS。 再看题目,经过某种变化,可以理解为经过某种状态,经过某种变化到达另一种状态,最后到达最终状态,最小步骤数,因此是一道BFS题。 此外,由于要标记已经访问过的节点数,visited,而题目又是一个字符串形式的四位数,因此把字符串对应的数字作为状态的唯一标志,来标记是否访问过。AC代码:#include<iostr原创 2017-08-20 15:39:18 · 232 阅读 · 0 评论 -
hdu 1180
主题思想 : BFS ,这里有个注意的情况是除了上下左右可以走,也可以不走即可以停留,所以需要把地图上可以停留的点,单独在push进队列。 再一个注意的点就是,当是楼梯时,是根据刚到达的时间,进行变向的,也就是说,到达楼梯需要爬的时间,正好是上一步结束的时间。AC代码:#include <iostream> #include<cstdio> #include<queue> #include<str原创 2017-08-19 20:47:06 · 265 阅读 · 0 评论 -
hdu 1158 Employment planning
这题有两种解题思路 1.dfs 但是由于dfs可能很多状态会重复搜索,所以需要记忆化搜索。记忆化搜索的典型方式是: dfs +dp 另dp[i][sum] 表示 第i个月时有sum个人时,剩余月份所需开销最小。 则dp[0][0] 即为最后结果。 对于第i 个月 刚开始有sum 个人,sum如果小于等于,则需要新招聘人员,那么dp[i][sum]=dp[i+1][person[i原创 2017-08-11 15:20:34 · 240 阅读 · 0 评论 -
hdu 1175
主题思想 :BFS,已经做了好几道BFS,结果这道还是没写出来, 写BFS ,要考虑好,跳过的条件,分开下,首先判断,是否跳出格子,然后判断是否可以跳过其他条件,再判断是否到达 目的地 再判断,是否访问过,进行加入。bool bfs(){ Node p; p.x=sx; p.y=sy; p.flag=-1; p.t=0; queue<Node> pq;原创 2017-08-16 20:58:34 · 233 阅读 · 0 评论 -
hdu 1142 dijkstra
最短路径+ 记忆化搜索注意转变思路,每一点到家的存在最短路径,则,以家为起点,寻找到每一点的最短路径。 dijkstra 单源最短路径 ,求的是 一个源s到其余每一点的最短路径记忆化搜索如果不对节点进行记忆化搜索,将会有大量重复搜索过程。如果记录结果,那么会减少搜索量。 要记录什么结果呢? 用一个数组记录每一个节点到终点有几条路径。如果遇到已经搜索过的节点,则直接返回就可以了,不必再重复搜原创 2017-08-08 15:39:55 · 227 阅读 · 0 评论 -
hdu 1072 Nightmare
此題有有意义,纪念下因为此題,特殊在走过的路可以重走,需要进行记忆化搜索,最小时间,肯定使用BFS走过的节点可以重走,但是如果走到这个节点的时间是相同的,则重走这一节点没有意义。 所以和以往传统搜索題不同, 传统的搜索,用visited[x][y]来标记是否走过,以便下次不再重复走 这次,需要再多加一个维度,加上时间 visited[x][y][time] 表示time相同时不需要重走, 此原创 2017-07-20 23:50:09 · 253 阅读 · 0 评论 -
let 79 Word search
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically n原创 2018-01-17 21:57:05 · 251 阅读 · 0 评论