题意: 有一篇由n个自然段组成的文章。希望将他们排成递增序列。只能剪贴和粘贴交替进行,剪贴时可以剪贴一段连续的自然段。分析: 用IDA*算法求解。当3*d+h>maxd时剪枝。代码: #include #include #include #include using namespace std...
分类:
其他好文 时间:
2015-10-11 18:03:42
阅读次数:
113
题目大意:在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
思路:使用IDA*算法。估价函数为现在棋盘与目标棋盘的对应元素不同的个数。剪枝:若当前深度加上...
分类:
其他好文 时间:
2015-08-20 19:03:46
阅读次数:
159
IDA*算法,即迭代加深的A*算法,实际上就是迭代加深+DFS+估价函数题目传送:The Rotation GameAC代码:#include
#include
#include
#include
#include
#include
#include
#include
#inclu...
分类:
其他好文 时间:
2015-08-15 00:14:54
阅读次数:
162
紫书上给的是状态空间搜索,其实本题也可以用IDA*算法,因为其符合IDA*的特点 : 求最小迭代次数 。
根据旋转的规律,我们可以用几个数组来储存向各个方向旋转时改变哪些量,用来维护旋转这个操作 。另外就是估价函数:当前出现在中间八个格子中次数最多的数字设为t ,那么剩下的迭代次数就是8 - t , 如果它加上已经迭代的次数d > maxd ,则应当剪枝 。
另外想到了一个估算回溯法的时间复...
分类:
编程语言 时间:
2015-08-11 21:28:50
阅读次数:
208
今天做的福州赛区区域赛的题目重现,一整场都在抠这道题仍然无法AC,时间卡的很紧,不过其实也是自己的搜索学的实在太差,紫书上刷的最少的就是第七章的题 。
我一开始就看出了这道题需要IDA*算法,但是昨天才看的还没能深入理解,通过赛后补这道题,感觉整体思路有了一个新的突破 。
IDA*算法就是迭代加深搜索和A*算法的结合,迭代加深搜索非常简单,就是从小到大枚举深度上限,适合求解深度未知的或者像该题...
分类:
编程语言 时间:
2015-08-08 09:11:28
阅读次数:
117
A题是哪个象棋的题:
B题hdu4122:
好像是水过去的,看到题解要用队列,就是简单的枚举加判断条件过去的。
C题hdu4123:
用到MRQ算法查询区间内的最大最小值
G题hdu4127
是个填颜色的题:
是把所有点分成3部分,已经和00连通的,还有就是下一次需要填的颜色部分,剩下的部分就是填不了的,
用IDA算法,分开写几个小程序,填充颜色同一个颜色的程序,当前状况需要改变最...
分类:
其他好文 时间:
2015-08-07 22:23:45
阅读次数:
271
又一道迭代加深搜索,从小到大枚举上限 。 关键的剪枝部分是写出启发函数,这个比较难。。
不过每次剪切后,不正确的数字个数最多减三还是很好理解的,因为我们算不正确数字个数的方法是看当前数字+1是不是等于下一个数字 。 所以每次剪切最多只有3个数字的后继数字发生了改变。 那么 剪枝条件就显而易见了 。
代码如下:
#include
using namespace std;
const in...
分类:
编程语言 时间:
2015-08-05 10:31:49
阅读次数:
156
IDA*算法, 从小到大枚举深度上限,不过该题是有深度上限的,题目中的第一个样例表明:最多需要5个皇后就可以覆盖整个棋盘 。
利用紫书上的技巧,我们可以快速的判断任意两个棋子是不是在同一行、同一列、同一对角线 (详情见紫书P193那两个图)。
这样之后暴力搜索就可以了 。 每一层需要O(nm)的复杂度,但是实际上并不需要那么大的复杂度 。和八皇后问题类似 , 当前行之前的行已经放置了皇后,...
分类:
其他好文 时间:
2015-08-05 08:57:48
阅读次数:
194
IDA*算法,迭代加深搜索和A*算法的结合 。
迭代加深搜索适用于那些没有明显深度上限的题目,将深度从小到大枚举,直到找到最优解 ,减小了深搜的盲目性 。
A*算法需要一个乐观估价函数,在这个函数里寻找一个代价最小的点去搜索,所以时间复杂度都浪费在这个上面了 。
其实我照着紫书上巧的,感觉很容易,实际上其中的算法思想是要静下心来仔细研究的,练ACM这么久了,深深感到这个竞赛是那么的迷人,又是...
分类:
编程语言 时间:
2015-08-04 21:06:59
阅读次数:
163
分析:IDA*解决,借鉴大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者把每一列上的数字转化成相同的,二者取最小值。
例如:
1 1 3 2
2 4 4 2
3 3 1 4
1 2 3 4
把这个矩阵转化成行合法矩阵需要的操作:第一行至少要2次,第二行也是2次, 第三行是2次,第四行是3次, 所以把矩阵转化成行相同至少要3次。
#include
usi...
分类:
编程语言 时间:
2015-06-01 22:39:16
阅读次数:
164