随笔分类 - 搜索
摘要:要点 会发现本质上棋盘分成了若干个独立集,本集合内的点放不放棋子并不影响其他集合内的 集合的划分方式就是满棋盘跳马步直到全跳过了,然后每个集合就分成两队,我们选人多的那队放棋子,人少那队当禁区 C++ const int maxn = 1e3 + 5; const int nx[] = { 2, 2
阅读全文
摘要:要点 题意:可以拐弯,即哈密顿距离 注意不可以直接一个一个搜,这过程中会把下一轮的标记上,导致同一轮的其它点没能正常完成应有的搜索 因此采用双层广搜,把同一轮先都出队列再的一起搜 C++ include include include include include include include
阅读全文
摘要:虽然不是正解但毕竟自己做出来了还是记下来吧~ 对每个人分别dfs得到其期望,某两维的组合情况有限所以Hash一下避免了MLE。 C++ include include include include include using namespace std; const int maxn = 51,
阅读全文
摘要:要点 标签是dp但搜索一发就能过了。 因为是对称矩阵所以试填一下就是一个外层都填满了,因此搜索的深度其实不超过5。 显然要预处理有哪些素数。在这个过程中可以顺便再处理出一个$vector:re[len][number]$,表示前面已经填了长度为len的数为number,那么最后会合法的填法应该在后面
阅读全文
摘要:用每个人的血量作为状态去搜索T飞,考虑题解中更好的搜索方式:每种血量有多少个人作为状态。这样会减去很多重复的状态,因为只要乘一下就得到了所有相同情况的和。 虽然我不会算,但是直观感受起来复杂度比较优秀。 C++ include include using namespace std; typedef
阅读全文
摘要:AC通道 要点 思路:题解中将所求进行转化$$max\{相似度\} = max\{M 不相似度\} = M min\{不相似度\}$$因此转化为求某01串T与所给众S串的最小不相似度,而最终答案是选取最小不相似度最大的那个。 方法:转化后就可以运用广搜得到所求,即从起始串开始修改某一位,第一次得到此
阅读全文
摘要:AC通道 两边同步搜,一步里面A走一次B走两次,遇到对方走过的地方就得到了答案。
阅读全文
摘要:1.不会超过500个不同的串…… 2.样例没给has到has是怎么样的,实测是true。 3.记忆化别剪错枝就好,嘤嘤嘤…… C++ const int maxn = 505 + 5; int n, m, tot; string s, op, t; bool can[maxn][maxn][2],
阅读全文
摘要:数位dp第二道~就当成搜索,套板子写了写。我写的dp[pos][pre][state0]记录的是当前pos位没有限制时、前面的数是pre时、前面是否都是0时的方案数。
阅读全文
摘要:喜闻乐见的数位入门第一道,这个dp[pos][state]记录的是第pos位如果没有限制的话(有限制当然要搜一搜暴力数了),前一位 放6 or 不放6 的方案数。也就是并不是要求的答案,其实就是记忆化一下,减小搜索的复杂度,跟dp没啥关系吧……
阅读全文
摘要:随便写一下的搜索,别的OJ深搜就过了,强大的BZOJ成功栈溢出RE了我并使我屈服地用广搜过掉,第一行手动开栈惨遭无视。 广搜: 深搜:
阅读全文