搜索
zhaofukai
行有不得,反求诸己
展开
-
UVA 10801 Lift Hopping
<br />题意:给n个电梯,电梯可在m个层停下,每个电梯的速度不一样,给出起点0,终点Goal,求从起点到终点花的最少时间。<br />这道题实际是求最短路的问题,也是隐式图的搜索,与658 - It's not a Bug, it's a Feature!是同一类问题。我们设从0层开始,先找出从0层所能到达的各个层(状态),放入队列,然后从队列中找出用时最少的状态继续进行找,直至找到Goal层,结束或队列空结束,算法思想类似dijkstra。<br />程序代码:<br />#include<iostr原创 2011-03-16 19:21:00 · 1294 阅读 · 0 评论 -
UVA 658 - It's not a Bug, it's a Feature!
<br />这道题题意是:某个软件有n个漏洞m的补丁,而每个补丁修复漏洞有前提条件,即有些漏洞必须存在或不存在,每个补丁的修复时间各不相同,现在有n个漏洞,让你求出把这n个漏洞全部修复所花的最少时间。<br />这道题实际是个最短路问题,可用隐式图搜索来做。这道题比较有技巧性的地方是判断补丁能否修复当前漏洞,如果直接用字符串,会超时,这里我借鉴了别人的经验,用两个整数的位来表示,第一个数把+的位置成1,第二个数把-的位置成1。<br />例如:++--0-+- --++--00,我用f[2]表示前边的串,b原创 2011-03-16 20:14:00 · 1933 阅读 · 3 评论 -
The Castle
<br />这是一道搜索题。求连通的的房间的个数,最大的房间有几个room,以及拆完那堵墙后连通的房间有最多的room。<br />这道题的输入比较怪,1表示西边有墙,2是北边,4是东边,8是南边。然后给一个数表示这个room四周墙的情况,实际就是这个数的二进制表示,若i位为1,则2i 代表的数就是那个方向有墙。我用二维矩阵存的这个图,然后dfs(),求连通的房间,并记录各个房间的room,最后再枚举墙,求最大的连通房间。<br />最后拆墙时,先拆最西边,其次最南边。他是面向东和南的,拆面前的墙时,他所在原创 2011-04-10 20:50:00 · 424 阅读 · 0 评论 -
HDU 2482 Transit search
实际是一道搜多题。只不过题目叙述过于复杂,读懂后就比较好处理程序代码:#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define exp 1e-9#define INF 1000000typedef pair pill;typedef struct原创 2011-05-04 00:05:00 · 1040 阅读 · 4 评论 -
1020 - Anniversary Cake
这是一道搜索题,搜索的时候有2个剪枝:1、搜索顺序。如果两个正方形的边长相同,则在同一层只搜索一次就可以。2、在每一层搜索时,从每一列中最小的行开始,如果正方形放不下,换个较小的。第一个条件很重要,如果不注意会超时。在存矩形的时候有个优化,只用一个一维数组存,表示这一列已经放了多原创 2011-07-25 09:54:02 · 491 阅读 · 0 评论 -
POJ 1725 BALL
这道题看似很麻烦,但看明白了可以直接dfs求解。按理说,这题的复杂度应该挺高的,但不知为什么不用什么剪枝就能过,可能数据太水了。用一个数组Adjacent[][]记录下每个面的相邻面编号,在dfs时,枚举每一个tile,然后有五种放置方法,判断每一种是否合理,若合理则进入下一原创 2011-09-04 14:25:13 · 793 阅读 · 0 评论 -
A*搜索求最短路
以下文章转自http://www.cppblog.com/linyangfei/archive/2008/07/26/47662.html 原来这就是传说中的A*.第一次写的A*,多多感谢alpc55推荐的这道好题。先说说原先读到这到题目的想法,以前也听讲过k短路,我转载 2011-09-13 08:40:34 · 1397 阅读 · 0 评论 -
北京赛区 两道题目的题解
B.Hou Yi's secret 虽然题意很简单,也比较容易写,但有两个trick,一个是:一条直线上的点不能构成三角形,另一个是:重点算一个点。虽然已经知道这两个trick但还是错了2次,都是因为重点的没处理好。J.GemAndPrince、搜索+剪枝 这道题可以直接深搜,我加了一个剪枝:就是每消过一些宝石,就把这个局面连同得分保存在一个数组里,判断是否出现过,如果出现就剪枝。原创 2011-10-26 10:42:14 · 517 阅读 · 0 评论 -
搜索题
一个很好的搜索题分类,共36道题。没有做完(估计做不完了),但收获很大。转载很多,已不知原作者是谁,但感谢原作者的分享。 pku1175 Starry Night题目地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1175解法:BFS,要注意的是如何判断图形是一样的,我的做法就是计算每两个点的距离之和。看:http://hi.ba转载 2012-08-02 15:18:04 · 1691 阅读 · 0 评论