OI-搜索
略
嘉伟森的猫
NYU Shanghai本科,MBZUAI机器学习硕士,深度学习/强化学习菜鸡
展开
-
Luogu 1979(BFS+SPFA)
传送门 题解:先BFS预处理move[i][j][k][h]表示从(i,j),空格在k方向,走到h方向的最小步数。再对于考虑从S到T,每个状态dis[i][j][k]只能从它的相反状态dis[i][j][opp(k)]转移过来,所以可以视作有向图,进行SPFA。 注意的细节都在代码中。 小结: 1.将实格的移动考虑为空格的移动,很巧妙的转化! 2.初始化函数一定要放外面啊。。。不然叫什么预原创 2017-09-18 23:52:47 · 406 阅读 · 0 评论 -
bzoj 1598(SPFA+A*)
传送门~~~A*的经典应用~~~题解:先预处理反向图的单源(T)最短路,之后启发式搜索,每次从优先队列中弹出f(p)最小的点p,如果点p就是t,则计算t出队的次数,如果当前为t的第k次出队,则当前路径的长度就是s到t的第k短路的长度,算法结束,否则遍历与p相连的所有的边,将扩展出的到p的邻接点信息加入到优先队列继续搜。#include#include#include#原创 2017-10-22 12:53:08 · 271 阅读 · 0 评论 -
Luogu 2346/codevs 1004(IDDFS)
传送门题解:可以BFS+Hash判重,但是本蒟蒻还是把此题当做迭代加深的模板题来做。所谓迭代加深就是指每次限定一个迭代深度,到达这一层就返回,如果找不到解再扩大限制重复搜索直到搜到解,否则直接返回答案。#include#include#include#includeusing namespace std;char s[5][5];int sx[2],sy[2],cnt=原创 2017-10-24 20:35:14 · 245 阅读 · 1 评论 -
Luogu 1514(BFS+贪心)(NOIP 2010)(引水入城)
传送门题意:一个N*M矩形,每个格子有一个海拔,需要在第一行恰当位置建水利设施将水引到最后一行的每个格子。有两种设施:抽水站,可以建在第一行任意位置;引水站,只要它周围存在一个格子比它地势高且那个格子建的有任意一种水利设施,就可以建造,建造后水引到这里。第一行输出1/0代表能否使得后一行全部引到水。如果是1,求最少需要多少抽水站;如果无法满足,输出最多有多少个无法供水的位置。题原创 2017-11-09 17:26:49 · 317 阅读 · 0 评论 -
bzoj 1673(A*)
传送门题意:有n个砝码(n 从中选择一些砝码,使得总重量最大而不超过c。w[i]按单调不降顺序给出,保证w[i] >= w[i-1]+w[i-2] (i >= 3)。题解:有题目那条类似斐波那契数列的性质,从大往小DFS。启发式剪枝:当剩余所有砝码都选仍不足之前的最大值时直接return。P.S.对于每个砝码选不选,必须先执行“选”的情况再做“不选”的情况,否则原创 2017-10-22 14:39:00 · 292 阅读 · 0 评论 -
UOJ 147/bzoj 4325(DFS)(NOIP 2015)
传送门NOIP 2015 D1T3 斗地主题解:优先考虑三种顺子,其余的用一个cal函数统计出来,直接搜即可。#include#include#include#includeusing namespace std;int c[15],cnt[5],ans;inline int cal(int *c) { memset(cnt,0,sizeof(cnt)); int re原创 2017-10-22 10:05:51 · 366 阅读 · 0 评论 -
Luogu 1074(DFS)(NOIP 2009)
传送门 NOIP 2009 T4 题解:暴搜,注意优化: 1.先填能选的比较少的格子 2.好像可以用链表剪枝,留坑待填(应该马上就能填好)#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=10;int cnt=0,mp[M原创 2017-09-18 15:23:21 · 442 阅读 · 0 评论 -
OpenJudge 7384(分成互质组)
应hfu要求,近几日整理搜索专题的内容,无意中翻出了一年前死活A不掉的一道不可做题(当时觉得)。看着自己的代码风格变化天翻地覆,无奈感叹时间飞逝。。。算了少矫情管他的先A了再说(ง •̀_•́)ง先附上一年前WA(8/10)的代码#include<stdio.h>int n,divide[15][10],sum[15]={0},t,a[15],num1,ans=0;int prime(int a原创 2017-10-10 17:17:31 · 632 阅读 · 0 评论 -
bzoj 1024(DFS)
传送门 题解:定义状态dfs(x,y,res)表示长宽/宽长为x,y且还有res个人没分到时的答案,直接暴搜。多写写搜索吧,NOIP再难也逃不过一句话:骗分过样例,暴力出奇迹!#include<bits/stdc++.h>using namespace std;double x,y;int cnt;double dfs(double x,double y,int res) {//edge原创 2017-09-19 17:01:56 · 431 阅读 · 0 评论 -
bzoj 1085(A*)
传送门 题解:启发式搜索(A*) evalue( )为估价函数,预估如果可以在限定步数内实现才继续,是一种优越的剪枝。 注意:代码注释中-1的:局面中有i和不同至少要跳i-1步。 多谢Pendragon大佬指出本蒟蒻的错误。#include<bits/stdc++.h>using namespace std;const int MAXN=6;int goal[MAXN][MAXN]={原创 2017-09-19 16:33:45 · 433 阅读 · 0 评论