![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 56
TommyTT
我擦,要挂科了。
展开
-
poj 3895 dfs找图中最大环
poj 3895 dfs找图中最大环原创 2013-07-18 10:21:41 · 1710 阅读 · 0 评论 -
poj 3501 Escape from Enemy Territory 二分+bfs
水题,不解释。#include#include#include#include#includeusing namespace std;#define N 1000002struct node{ int x,y; int dis;}base[10005],st,end;int n,m;int maps[1005][1005];bool vis[1005][原创 2013-12-18 20:09:56 · 1004 阅读 · 0 评论 -
poj 2718
首先除以二,使得2边平均,然后2次dfs分别枚举a和b,更新ans。注意0可以单独存在,但不能作为前导0.ps,第二次dfs也可以用next_permutation全排列#include#include#include#include#includeusing namespace std;int a[100];int n;原创 2013-12-08 23:22:01 · 912 阅读 · 2 评论 -
poj 3669 Meteor Shower
预处理地图,表示当前点爆炸的最早时间,然后bfs找到安全区域。坑点:1.有可能一开始的0,0点就被炸了 2.安全区域不是0-300,0-300,而是0-正无穷,0-正无穷,所以边界判断只要x>=0&&y>=0就够了。其他的没什么#include#include#include#includeusing namespace std;int maps[305][原创 2013-12-11 20:02:48 · 802 阅读 · 0 评论 -
POJ 2386 Lake Counting
八连块#include#include#include#includeusing namespace std;int n,m;char maps[105][105];bool vis[105][105];int dx[]={-1,-1,-1,0,0,1,1,1};int dy[]={-1,0,1,-1,1,-1,0,1};bool isok(int x,int y){原创 2013-12-11 20:22:31 · 720 阅读 · 0 评论 -
poj 3134 IDA*
因为n只有1000,再加上是2的k次幂的形式,所以深度不大。很明显的迭代加深,加个A*剪枝就能秒出样例,700+ms,代码很短。#include#include#include#include#include#includeusing namespace std;int deep,n;int v[1005]={1};int h(int top){ int k=d原创 2013-12-12 01:48:38 · 1121 阅读 · 0 评论 -
poj 1011
最近功力下降好多,肿么破。。。凡是每次的第一根断木棍,都不能出现不return true的情况,如果出现了,直接false。强力剪枝。#include#include#include#include#includeusing namespace std;int a[100];int sum,n;int v[4005];int all;int one;i原创 2013-12-08 23:19:47 · 917 阅读 · 2 评论 -
hdu 2234 无题I IDA*
因为移动一行最多只能把列上相同的数+1,移动一列也最多只能把行上相同的数+1.所以h()函数可以设计为,min(使每行相同最少需要的步数,使每列相同最少需要的步数)。之后就是裸的IDA*了。原创 2013-11-23 18:21:41 · 1115 阅读 · 0 评论 -
CodeForces 142C Help Caretaker
http://codeforces.com/problemset/problem/142/C算是水果的,因为真正的剪枝应该是除以5,但是总超时,改成除以6,居然过了。。。#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2013-11-19 22:39:40 · 1204 阅读 · 0 评论 -
hdu 4753 Fishhead’s Little Game (记忆化搜索+状态压缩)
类目类型和 这题很像 点击打开链接记忆化搜索,总分为9分,当前场上剩下的总分减去下一个人能拿到的最多的分数,就是当前玩家能拿到的分数,取最大值就是最优选择。由于最多可能有12条边,所以取边的状态可以用二进制状态压缩表示,10000的数组就足够存下了。#include#include#include#include#includeusing namespace std;b原创 2013-09-21 20:43:05 · 2344 阅读 · 0 评论 -
hdu 3225 Flowers Placement 二分图匹配+dfs
#include #include #include #define maxn 300005#define lson num<<1,s,mid#define rson num<<1|1,mid+1,e#include#include#includeusing namespace std;#define N 205bool vis[N];原创 2013-10-18 09:48:24 · 1299 阅读 · 0 评论 -
hdu 3720 Arranging Your Team 枚举
不可能解可以直接判断。搭配产生的附加分可以用一个二维数组保存。枚举1442,4种类型的人,因为总人数只有23个,所以可以搜索暴力枚举,然后保存最优解。#include #include #include #include #include #include #include #include #include #include #include原创 2013-10-07 23:40:51 · 1338 阅读 · 0 评论 -
hdu 4435 贪心+可行性判断
题目中用二进制表示了花费。所以,我们假设一开始全部建加油站,然后从编号大的开始枚举,如果能拆掉,就一定拆掉。(为什么?因为即使后面的能全拆,也没有拆掉当前这个好,二进制的性质决定)。问题就在于怎么判断能否拆掉,训练赛的时候我们队也是在这个地方各种纠结。。。思路:以bfs解法为例,首先从0开始扩展,如果下一个点是加油站,那么可以把它加入队列,让它继续扩展。如果下一个点不是加油站,那么它一定是原创 2013-08-18 22:18:23 · 750 阅读 · 0 评论 -
hdu 4090 GemAnd Prince dfs+bfs+最优性剪枝
思路,dfs搜索,最优性剪枝。个人被坑很久的地方就是枚举格子的时候,应该是枚举整个八连快,不然的话一定超时。代码有点丑,将就一下吧。。。#include#include#include#include#include#include#include#include#include#includeusing namespace std;int a[10][10];原创 2013-08-27 23:40:13 · 1167 阅读 · 0 评论 -
hdu 4568 Hunter bfs建图+TSP状压DP
TSP问题。原创 2013-08-15 15:29:38 · 1626 阅读 · 3 评论 -
hdu 4620 Fruit Ninja Extreme(状压+dfs剪枝)
对t进行从小到大排序(要记录ID),然后直接dfs。剪枝的话,利用A*的思想,假设之后的全部连击也不能得到更优解。因为要回溯,而且由于每次cut 的数目不会超过10,所以需要回溯的下标可以利用一个二进制保存。由于cut最多30个,所以方案也可以用一个二进制保存。#include#include#include#include#includeusing namespace原创 2013-08-25 19:00:23 · 1087 阅读 · 0 评论 -
UVALive 4527 Vaccination Centers 搜索+剪枝
DescriptionTo prepare for the flu pandemic, country E wants to set up some vaccination centers. There are n regions in the country, numbered 0, 1, 2,..., n - 1. The costs associated with the原创 2014-01-28 19:19:39 · 916 阅读 · 0 评论 -
hdu 1252 水搜索
n个点的完全图,每条边都有一个颜色,告诉你三个东西的起始位置,问最少多少步把他们移动到一起。移动规则:若当前点要走的边和另外2个点连成的边颜色一样,则可以走。水题,20分钟1A,换了下char居然到第一了,2014年3月3日13:27:40#include#includeusing namespace std;int n;int A,B,C;char mp[51][51];原创 2014-03-03 13:27:04 · 1215 阅读 · 0 评论 -
15年(上)周赛2(2015-03-15) Problem A Aizu 0121
To 学弟学妹们,经过仔细阅读,首先理解了题目是要我们求给定一个2*4的带号码的方格,每次可以交换 0和相邻的数,问给定起始状态,最少需要多少步交换可以达到目标状态 (不要问我为什么日语这么屌)0 1 2 34 5 6 7典型的八数码问题,这里用到bfs求出所有解,说一下通常解法。从起点状态开始,上下左右扩展所有可能情况,若遇到最终状态,则输出。怎样判断一个状态之前已经扩展原创 2015-03-24 14:59:02 · 916 阅读 · 0 评论 -
poj 1198 hdu 1401 搜索+剪枝 Solitaire
写到一半才发现可以用双向搜索4层来写,但已经不愿意改了,干脆暴搜+剪枝水过去算了。想到一个很水的剪枝,h函数为 当前点到终点4个点的最短距离加起来除以2,因为最多一步走2格,然后在HDU上T了,又发现再搜索过程中,这个估价函数应该是递减的(贪心),再加上这个剪枝就过了。#include#include#include#include#include#include#i原创 2014-10-04 22:56:56 · 945 阅读 · 0 评论 -
UVA 11212 IDA*
移动一块连续的区间使得数列递增。问最少次数。直接IDA*暴搜,不过我没有想到A*函数,所以就随手写了个连续递增块数作为估价函数,WA了,然后除以2,还是WA,除以3,WA,除以4.。。过了= =#include#include#include#include#include#includeusing namespace std;#define stop system("pau原创 2014-10-04 18:13:06 · 1108 阅读 · 0 评论 -
ZOJ 3814 Sawtooth Puzzle 状态压缩搜索
由于一个框框只有4种状态,总状态数只有4^9,bfs可解。麻烦的地方就在于模拟。我的状态的存法是,将初始状态看做000000000,若顺时针旋转一次就+1, 3+1=0。bfs的过程中,需要套一个dfs计算旋转当前框框会影响到哪些框。有个地方要注意,就是目标状态其实不止一种,因为有些框框旋转之后不变,我们必须把所有可能的目标状态都计算出来,样例的中间那个框框就是这种情况。#in原创 2014-09-07 18:58:43 · 1614 阅读 · 0 评论 -
BZOJ 3562: [SHOI2014]神奇化合物 并查集+dfs
点击打开链接注意到20w条边,但是询问只有1w,所以有很多边是从头到尾不变的。首先离线处理,将从未删除的边缩点,缩点后的图的点数不会超过2w,对于每一次add或者delete,直接dfs看是否能从a走到b,然后维护一个ans。数据不强,不然这种复杂度起码要跑10s。。#include#include#include#includeusing namespace std;#原创 2014-06-13 23:02:59 · 1351 阅读 · 0 评论 -
hdu 1253 胜利大逃亡
一个三维的地图#include#include#includeusing namespace std;int map[55][55][55];bool vis[55][55][55];int a,b,c,time,ans;int dx[]={0,0,0,0,1,-1};int dy[]={-1,1,0,0,0,0};int dz[]={0,0,-1,1,0,0};struc原创 2013-05-22 17:12:15 · 545 阅读 · 0 评论 -
poj 1695 Magazine Delivery 记忆化搜索
dp[a][b][c],表示三个人从小到大依次在a,b,c位置时,距离结束最少的时间。每次选一个人走到c+1位置搜索就好了。坑点在于不能floyd,估计题目没说清楚,意思就是如果没送Li,那么Li~n的点连去都不能去。#include#include#include#includeusing namespace std;#define INF 0x3f3f3f3fint d原创 2014-07-01 09:11:58 · 825 阅读 · 0 评论 -
hdu 4597 2013吉林通化邀请赛 Play Game 记忆化搜索
dp[ba][ta][bb][tb]表示a堆牌从下面拿了ba张,从上面拿了ta张。b堆牌从下面拿了bb张,从上面拿了tb张。当前玩家能得到的最大的分数。扩展方式有4种,ba+1,ta+1,bb+1,tb+1,用当前剩下牌的总分减掉它,取最大值,就是当前玩家的最高分。记忆化搜索#include#include#include#include#includeusing names原创 2013-08-24 16:43:29 · 1760 阅读 · 5 评论 -
poj Navigating the City 水bfs
感觉题意有点问题,很多情况没解释,我们暂且相信没有那么多其贵原创 2014-05-17 17:31:27 · 568 阅读 · 0 评论 -
wikioi 1225 八数码难题 IDA*
八数码0.0,我又来水博客了。IDA*算法,A*为曼哈顿距离,判重用康拓展开。#include#include#include#include#includeusing namespace std;int a[4][4];int dx[]={0,0,-1,1};int dy[]={-1,1,0,0};char s[]="123804765";int end[4]原创 2014-05-10 18:59:21 · 1222 阅读 · 0 评论 -
hdu 3143 Speedy Escape 二分+搜索
PS. 训练赛的时候看完题就想到做法了,写完之后自觉很对,但是无限WA,实在无解,赛后重写一遍,继续无限WA,换G++交,神奇的过了,(改%lf和%f,C++都过不了)唉,无法理解啊。英文很长,但很简单,题意不赘述了。首先求到兄弟到所有点的最短路(不能经过警察局),然后求到警察到所有点的最短路。然后二分速度,dfs验证可行性,若到达当前点的时间小于等于警察到这个点的时间,则原创 2014-04-08 20:17:51 · 814 阅读 · 0 评论 -
USACO/fence8 迭代加深搜索+剪枝
题目链接迭代加深搜索思想。枚举答案K,考虑到能否切出K个木头,那么我们当然选最小的K个来切。1、对于原材料,我们是首选最大的还是最小的?显然,首选大的能够更容易切出,也更容易得到答案。2、对于目标木头,我们是优先得到最大的还是最小的?显然,由于K个木头我们都要得到,那么当然先把最大的(最难得到的)先得到,这种搜索策略更优。3、假设总原材料为all,前K个木头总和为sum,那原创 2014-05-09 13:53:38 · 895 阅读 · 0 评论 -
hdu 4801 Pocket Cube 四面魔方,模拟+搜索
魔方只有4面,且深度只有7层,所以可以搜索解决。由于模拟过程复杂,干脆用一个辅助数组记录每次转动每个点的对应位置,在脑中空间想象一下就好了。值得注意的一点是不需要模拟12次(6条边,顺+逆2次)因为一条边顺时针就相当于另一条边逆时针。#include #include #include #include #include #include #include #include原创 2014-03-25 20:52:32 · 1233 阅读 · 0 评论 -
wikioi1174 靶形数独 搜索
#include#include#include#include#includeusing namespace std;struct node{ int x,y; node(int xx,int yy){x=xx;y=yy;}};int score[10][10]={ {6,6,6,6,6,6,6,6,6}, {6,7,7,7,7,7,7,7,6原创 2014-05-06 22:21:07 · 770 阅读 · 0 评论 -
poj 3131 双向搜索+hash判重
题意:初始状态固定(朝上的全是W,空格位置输入给出),输入初始状态的空格位置,和最终状态朝上的位置,输出要多少步才能移动到,超过30步输出-1.简析:每一个格子有6种状态,分别是0WRB, 1WBR, 2RWB, 3RBW, 4BRW, 5BWR (上前后 对应的颜色)由于只给出了终态朝上的颜色,其他的不知道,所以终态真正应该有256种,对于这个可以用一次dfs全部枚举出。原创 2013-07-14 10:49:09 · 1061 阅读 · 0 评论 -
hdu 4294 Multiple 搜索
假设a,aa,aaa……一直下去,对n取模,一定会出现循环,也就是会有aaaa…aaa和aaa…aa对n取模相同,那么把他们相减得到aaaa…0000,则只出现了2个数字得到了n的倍数。这种方法虽然不是最优,但保证了不同的数不会超过2种,所以可以直接搜索。枚举所有组合(首先枚举只出现1种数字,再枚举出现2种的),然后搜索就够了,判重时用余数判重。注意得到答案后要进行字典序比较。此题不用原创 2014-03-18 22:02:35 · 864 阅读 · 0 评论 -
hdu 4490 Mad Veterinarian 超级无比蛋疼的水bfs
数据超级水我会乱说?hdu第一的代码我会乱说?10以上就不要了我会乱说?队列只要开1000我会乱说?→_→#include#includeusing namespace std;bool vis[12][12][12];int tras[4][4];struct node{ int a[4]; int dis;}st,end,q[1000];char原创 2013-08-11 15:51:37 · 1217 阅读 · 4 评论 -
poj 3897 Maze Stretching 二分+A*搜索
poj 3897 Maze Stretching 二分+A*搜索原创 2013-07-18 00:46:54 · 1485 阅读 · 0 评论 -
hdu 2952 Counting Sheep(dfs)
类似八连块问题题意:如果上下左右其中有‘#’ 则它们属于一个羊群,只需对每一个格子dfs访问它的上下左右就行了。#include#includeint map[111][111];bool vis[111][111];int n,m;void dfs(int x,int y){ if(vis[x][y]||!map[x][y]) return; vis[x][y]=原创 2013-05-22 14:18:59 · 629 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone
题意,求从S到D正好T步能不能到。加一个奇偶剪枝,只有当起点终点的曼哈顿距离和T的奇偶性相同时,才需要搜索,否则直接输出NO。#include#include#include#include#include#includeusing namespace std;int dx[]={-1,1,0,0};int dy[]={0,0,-1,1};int map[10][10];原创 2013-06-17 23:46:45 · 674 阅读 · 2 评论 -
hdu 1560 DNA sequence(迭代加深搜索)
题意:找到一个最短的序列,使得输入的所有序列都是这个序列的子序列。输出最短序列的长度DNA sequenceTime Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 687 Accepted Submission(原创 2013-06-14 15:28:40 · 1912 阅读 · 1 评论 -
hdu 3368 Reversi
挺像搜索的,对每个*点,找它的八个方向,满足游戏规则就+1,最后保留最大的。#include#include#includeusing namespace std;char map[10][10];int direct[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};int ans;int tmp;bo原创 2013-06-05 20:53:41 · 675 阅读 · 0 评论