搜索专讲

Posted 饕餮传奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索专讲相关的知识,希望对你有一定的参考价值。

搜索专讲

Tags:搜索 讲课

作业部落

评论地址


Part 1 课件下载(预计开放时间7.20-7.25)

开放时间结束(恕不外传校内资料)

Part 2 Dancing Links

博客链接

Part 3 Meet in the middle

博客链接

题单一句话题解

题单链接

李老师给的包

m不超过19位

三维迷宫

处理质数,爆搜改每一位

广搜最短路

搜索每次的操作,记录方案

八皇后

暴力去移动每个柱子上的盘子

汉诺塔的递推

搜,记住读入是先列再行!!!调了一上午

走路的方向是固定的,在网上搜懂题目的意思就直接模拟就好啦

汉诺塔的递推

照着题意模拟,题意不太好懂,看看我的代码后面的注释是题意

小木棍,把后面洛谷上的kuai过来AC,题解在后面

太过分了,还是小木棍,题解贴在下面哈

数独问题,爆搜能过,可以用Dancing Links

自己在网上找的

他们说枚举第一列翻转的情况下面的就确定了
完了说好的搜索我用高斯消元做的

二分答案,然后从大往小地贪心地去加有90分,然而这个贪心显然错误,改用搜索,然后加上可行性剪枝:浪费的材料大于最大值则不行

如题,类似八皇后的搜索就可以轻松AC本题
dalao想用舞蹈链也没人拦你

高级的数独,一般采用的方法是先搜确定点多的行或列,也算一个剪枝吧
本题也可用舞蹈链做

用BFS处理每个临湖的城市可以处理的沙漠城市的区间,若能全部覆盖,则BFS选取最少的区间
这题值得写一写

区间DP,记搜会很好写,不记搜也很好写

用next_permutation枚举放置顺序,注意对数学公式细节的处理

不知道那天的htam给你留下了怎样的心理阴影,反正我改动后放过了一种爆踩std的解法

汉诺塔系列问题,出题人为了不让你一行公式就过特意加了高精度

个人觉得是最难的汉诺塔问题,虽然代码很简单,核心思想就是把第\\(d\\)大的盘从\\(x\\)柱弄到\\(y\\)柱,那么\\(d-1\\)盘一定在\\(z\\)柱上,递归先把\\(d-1\\)弄到\\(z\\)

大家都考过这道题吧,对抗搜索加记忆化,不难想但是细节多

搜索每一个字母是什么,然后加一堆剪枝啊就过了
大家刷Noip真题应该都见过

搜索入门题 入门nmb 题解放在课件里啊
前面POJ那么多铺垫就咕咕咕啦(≧▽≦)/

搜索的剪枝,题解放在课件里啦

迭代加深IDA*,题解在课件里啦

简单模拟题:你不信去做做
偷偷告诉你,\\(PKUWC\\)也出了一道斗地主哦,\\(PKUSC\\)出了主斗地九条可怜说还有四种排列没有用上

简单模拟题:你试试就知道有多简单了
不过\\(Noip\\)题大家都做了就不写题解了

一次至少打死两头猪(两点确定一条抛物线),搜索两个点然后暴力判断其他点是否能被打到
注意下精度(真感动没看题解还一遍过

竟然是结论题!看到搜索的标签就进来了,题解在课件里

照题意模拟即可,你谷最快代码\\(10k\\),模拟清楚就不难想了,调不出的可以找我要数据

爆搜过不了,得到性质:任两支队伍的得分交换对答案没有影响
按照\\(N\\)\\(1-(N-1)\\),\\(N-1\\)\\(1-(N-2)\\)这样的顺序会发现一些状态被重复搜索
排序后\\(Hash\\)然后存进\\(Map\\)就可以使用记忆化搜索进行剪枝了
一开始排个序还可以快\\(10\\)

上题的双倍经验题,直接把\\(AC\\)代码拿过来即可\\(AC\\)

模板题

模板题

模板题

模板题

模板题

这道题一定要写一写,分为六种运算符(反减反除),搜索所有情况

舞蹈链精确覆盖,把每个格子作为行,四个限制条件作为列求精确覆盖,注意记录方案

舞蹈链精确覆盖,照着题意模拟即可

舞蹈链重复覆盖,照着题意模拟即可

舞蹈链重复覆盖,把每个\\(n1×n2\\)的矩阵作为行,每个1的结点作为列求重复覆盖

退火或者爬山,实数注意要在退火的结果附近寻找最优解

退火,物理力的合成,实数注意要在退火的结果附近寻找最优解

退火构造方案,增大其调整次数

退火构造方案,增大其调整次数

半平面交转峰函数极值,退火实现,实数退火要继续寻找最优解

首先要有一个贪心策略:知道叫外卖的次数能够活几天,然后用退火实现找外卖次数,因为外卖次数与存活天数大致呈单峰函数

简单题,\\(SPOJ\\)用不了\\(map\\),注意\\(d=0\\)的情况,使用\\(Meet\\ in\\ the\\ middle\\)

为什么这题和上题都卡\\(Map\\)卡空间卡递归层数一定要手写二分?!
直接就是\\(Meet\\ in\\ the\\ middle\\)的板子了

你要用相同的策略和\\(m\\)个人玩\\(n\\)次石头剪刀布,你知道他们的策略,问你有多少种方法使得你与每个人玩都是平局,\\(m\\le100,n\\le25\\),注意\\(TopCoder\\)采用类输出(具体在vjudge的Leaderboard上看看我代码)。
普通搜索\\(3^{20}\\)会TLE,采用双向搜索合并状态,复杂度降为\\(3^{10}*Map常数\\),方法叫做\\(Meet\\ in\\ the\\ middle\\)

爆搜选或不选肯定过不了,然后\\(2^{20}\\)是可以接受的,各个物品互不影响采用\\(Meet\\ in\\ the\\ middle\\)分两边选或者不选,把\\(2^{20}\\)种情况记录的花费在数组里,运用尺取法计算答案

双倍经验,楼上\\(AC\\)代码改动\\(20\\)个字符即可\\(AC\\)

随机一个长度为\\(n\\)的排列\\(P\\)\\(val=\\sum[(\\sum_{i=1}^{n}A[P[i]][j])>m?1:0]\\),就是所有权值大于\\(m\\)的排列的方案数\\(val\\),求\\(\\frac{n!}{val}\\)\\(n\\le12,m\\le500\\)
普通爆搜会TLE,采用\\(Meet\\ in\\ the\\ middle\\)两边各搜一半后合并
或者使用状态压缩DP(代码量差不多,DP更符合人类思维吧。。)

康托展开后单向搜索或者双向搜索
双向搜索也是\\(Meet\\ in\\ the\\ middle\\)的一种哦

记忆化搜索,Min-Max搜索,Hash状态各种骚操作揉在一起
很难想到但是不难实现,题解在课件中了

搜索&容斥,计算答案用状态压缩DP完成
神仙题,具体看代码吧能懂的

神仙题,复杂度\\(10^{200}\\)但就是跑得过
首先发现只需要枚举\\(400\\)个位置然后递推就可以了
不难发现位置有个计算公式
于是可以给每行的头列定个范围
这样强有力的剪枝大概是\\(10000^2\\)级别了
具体看课件吧

只要知道了一个结论:\\(ans=n*(n-1)+1\\)
爆搜然后打表就好了
事实上,这个结论是错的,\\(n=7\\)就无法构造出这种方案了
但是通过打表可以知道这题的数据\\(n=(2,3,4,5,6,8)\\)满足这种规律

爆搜每个幸运数字的倍数多少个,然后容斥,课件有详解

知道约数的计算公式后,就可以通过搜索每个质因子出现多少次来做了

为大家准备了一些神仙题,大家可以试试,洛谷紫题黑题我太菜了不会写

以上是关于搜索专讲的主要内容,如果未能解决你的问题,请参考以下文章

入门篇ANDROID开发之BUG专讲

闲叙蓝牙OPP---文件传输BluetoothOppService专讲

闲叙蓝牙OPP---文件传输BluetoothOppService专讲

Android开发之BUG专讲:入门篇

入门篇ANDROID开发之BUG专讲

Python赋值语句专讲,可不能只会 a=b 啊!建议掌握!