- 博客(34)
- 收藏
- 关注
原创 UVA 12558 Egyptian Fractions (HARD version) IDA*
题意:经典的埃及分数问题,即给出一个真分数,求出用个数最少的单位分数来表示这个分数。如果有多种方案,要让每个分数尽量的大,即分母尽量的小。会有K个禁止使用的单位分数思路:我们可以发现,如果用普通的dfs,深度其实是无穷的。如果用bfs的话,广度也是无穷的。 对于上面的特征,我们就要考虑用IDA*算法了,即限制dfs扩展的深度,只要解的深度是有限的,那一定可以在有限的时
2014-11-29 16:25:42 783
原创 POJ 3460 Booksort IDA*
题意: 给你一个长度为N(N思路:首先我们可以发现,最多的操作次数为N次,即每次我们只将一个数字放到正确的位置。但是最少的操作次数该如何计算呢? 因为,我们注意到对于不同的序列,其操作的方法没有明显的规律性,这样我们就要用搜索来完成这个问题,同时在前面也提到了操作次数的上界,那IDA*算法就是个很好的选择。 IDA*算法的关键就是设计启发式函数
2014-11-29 14:42:24 1137
原创 POJ 1077 Eight 八数码问题 A*
题意:经典的八数码问题。思路:我们这里用A*搜索来解决问题。 在A*算法中,我们定义一个h函数表示当前状态到目标需要的至少的步数。这样,在搜索的过程中,我们取出可能更接近目标的状态进行扩展,所以能更快的接近目标。 而对于这道题,定义h函数为每个数字到正确的位置,如果直接移动所需要的步数。可以看到,h函数是实际步数的下界,这个在A*中是十分重要
2014-11-26 19:27:07 609
原创 HDU 1043 Eight 反向BFS
题意:同样的八数码问题。思路:因为是多组测试,如果每次都来一遍bfs的话,一定会超时的。我们可以注意到,因为终点给定,我们可以反向求出其他状态到终点的路径。这个样子的话,判重只能用康拓展开了。代码如下:#include #include #include #include #include using namespace std;typedef int state[9]
2014-11-26 15:33:42 579
原创 POJ 1077 Eight 八数码问题 BFS
题意:经典的八数码问题,给出现在的8个数码的位置,求出最少的移动方法,使之变成有序的八数码。思路:在这里就用BFS。对于这道题,实际上要处理的就是已经访问状态的记录和查重。 可以有一下方法:1.用set。这样常数比较大,对于这道题用set查重就会超时。 2.康拓展开,因为这是相当于8
2014-11-26 00:20:54 631
原创 UVA 129 Kypton Factor dfs构造解
题意:定义困难的串为字符串中存在相邻的相同的子串。现在用前L个大写字母来得到困难的串,求字典序第N个串是什么。思路:因为要构造出字典序的第N个困难的串,同时大写字母还不给定,我们只能用搜索来完成这个问题了。 我们从前到后对每个位置,从大到小枚举每个字母,同时检查是否是困难的串。 而在检查是否是困难的串的问题上,我们这里利用的递推的思想,即考虑当前
2014-11-25 17:50:47 550
原创 POJ 1330 Nearest Common Ancestors 最近公共祖先 欧拉序列RMQ
题意:给出一个树,让你求出两个节点的最近公共祖先。
2014-11-10 20:22:08 621
原创 POJ 2449 Remmarguts' Date 第K短路 A*
题意:给出一张图,求出从s点到t点的第K短路。如果没有,输出-1.思路:因为K 这里我们用A*算法。对应的h函数是每个点到t点的最短距离,可以看出这是最终距离的下界。 需要注意一点的是,在A*算法中,我们需要重复的加点,但是每个点至多加K次。如果加了K+1次,那对应的路的距离至少是第K+1短路。代码如下:#include #include
2014-11-07 17:26:59 479
原创 POJ 3693 Maximum repetition substring 后缀数组 暴力 rmq
题意:给出一个字符串,求出一个重复次数最多的子串
2014-11-05 10:41:48 542
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人