传送门
搜索套餐第二题 迭代加深
比较经典 由于他在时间和空间上的搜索层数都是未知
所以我们呢可以给他一个预定的层数进行搜索
如果本层不存在最优解
那就跳到下一层再进行搜索对于每一层的搜索注意剪枝
首先是可行性剪枝 对于本数 如果本数大于所要的 那么T掉本点
如果本数乘三尚且小于所求 T掉本点
注意分数的性质 注意通分
注意字典序最小的要求
吐槽一下 本题数据略弱
下面是AC代...
分类:
其他好文 时间:
2016-05-12 15:26:45
阅读次数:
163
总的来讲,这是一道很⑨的题,因为: (1)题目中有⑨个挂钟 (2)有⑨种操作方案 (3)这题因为解空间太小所以可以直接⑨重循环!! 这题可以用迭代加深搜索高效求解,剪枝的策略也很显然: >所求的操作序列一定是单调不递减的 >同一操作不可能在解中出现4次及以上(操作4次等于没有操作) 代码: 1 #i ...
分类:
其他好文 时间:
2016-04-10 12:55:38
阅读次数:
203
Water pipe
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 2265 Accepted: 602
Description
The Eastowner city is perpetually haunted with water supply shortages, so in order to...
分类:
其他好文 时间:
2016-04-07 16:00:36
阅读次数:
434
解题思路: 这是一道以快速幂计算为原理的题,实际上也属于求最短路径的题目类型。那么我们可以以当前求出的幂的集合为状态,采用IDA*方法即可求解。问题的关键在于如何剪枝效率更高。笔者采用的剪枝方法是: 1)如果当前状态幂集合中的最大元素max满足 max*2^(maxd-cur_d)<n,则剪枝。原因 ...
分类:
其他好文 时间:
2016-04-01 21:57:04
阅读次数:
157
解题思路: 这是紫书上的一道题,一开始笔者按照书上的思路采用状态空间搜索,想了很多办法优化可是仍然超时,时间消耗大的原因是主要是: 1)状态转移代价很大,一次需要向八个方向寻找; 2)哈希表更新频繁; 3)采用广度优先搜索结点数越来越多,耗时过大; 经过简单计算,最长大概10次左右的变换就能出解,于 ...
分类:
其他好文 时间:
2016-04-01 06:28:18
阅读次数:
198
解题思路: 1.简单分析我们可以发现,当n=9时,最多只需要剪切八次即可完成排序。并且全排列数量9!=362880不算很大,所以我们可以将当前排列作为状态,转化成十进制数存入set以便判重。然后逐渐增加解答树的深度(搜索最大深度)进行迭代加深搜索。 2.构造启发函数。本题可以定义一个后继错数:当前状
分类:
其他好文 时间:
2016-03-20 13:07:13
阅读次数:
273
题目链接暴力DFS当然不行于是迭代加深吧。IDA* 1 #include 2 #include 3 #include 4 using namespace std; 5 int tt,k,flag; 6 int ans[5][5]= 7 { 8 {1,1,1,1,1}, 9 {0,1,1,1,1},1...
分类:
其他好文 时间:
2016-01-22 17:01:41
阅读次数:
153
题目大意:在一个国际象棋盘上放置皇后,使得目标全部被占领,求最少的皇后个数。题目分析:迭代加深搜索,否则超时。小技巧:用vis[0][r]、vis[1][c]、vis[2][r+c]、vis[c-r+N]分别标志(r,c)位置相对应的行、列、主、副对角线有没有被占领(详见《入门经典(第2版)》P19...
分类:
其他好文 时间:
2015-09-20 23:50:39
阅读次数:
166
题目大意:经典的埃及分数问题。代码如下:# include# include# include# includeusing namespace std;# define LL long longint num[5],a,b,k;LL ans[10000],v[10000];LL gcd(LL a,L...
分类:
其他好文 时间:
2015-09-20 22:00:14
阅读次数:
161
DescriptionStarting with x and repeatedly multiplying by x, we can compute x31 with thirty multiplications:x2 = x × x, x3 = x2 × x, x4 = x3 × x, …, x3...
分类:
其他好文 时间:
2015-09-01 23:57:44
阅读次数:
519