![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AC自动机
yqdjl6
这个作者很懒,什么都没留下…
展开
-
HDU 2296 AC自动机+DP
这道题就是普通的求单词贡献最大,然后让你输出这个单词是多少,wa了老半天,最后调了好久,比较字符串先比较长度,长度短的优先,然后再比较字典序 #include<bits/stdc++.h> using namespace std; using LL = int64_t; const int maxnode=1e6+5; const int sigma_size=27; char s[m...原创 2018-10-12 17:17:25 · 132 阅读 · 0 评论 -
HDU 2457 AC自动机+DP
这道题好像让我对AC自动机的失配指针有了一个新的认识。 Fail指针的求法: Fail指针用BFS来求得,对于直接与根节点相连的节点来说,如果这些节点失配,他们的Fail指针直接指向root即可,其他节点其Fail指针求法如下: 假设当前节点为father,其孩子节点记为child。求child的Fail指针时,首先我们要找到其father的Fail指针所指向的节点,假如是t的话,我们就要看t的孩...原创 2018-10-16 13:29:31 · 106 阅读 · 0 评论 -
ZOJ 2243 考研路茫茫――单词情结 AC自动机+矩阵快速幂
就是问你长度小于等于L的单词且出现过至少一个子串的数量。首先算出长度小于等于L的单词有多少种,26^1 + 26^2 + 26^3+ …+26^L,然后再算出长度为1,2,3…L的单词中包含子串的数量,相减就行,第二部分用AC自动机求出矩阵,然后矩阵快速幂,其中从bin神那里学到一个技巧,矩阵的1次+2次+3次+…L次幂的和等于在原矩阵上最右边多加一列从0到L+1的1 #include<io...原创 2018-10-09 20:29:52 · 116 阅读 · 0 评论 -
hdu 4758 AC自动机+状压
这道题卡了好几天,然后发现状态写错的,dp[i][j][k][x]表示走到(i,j)点在AC自动机上第K个点状态为X的步数,有状态K是因为要求必须包含这两种状态,有一点不怎么明白,这道题应该是能用到这两个字符串的方案数,比如说用2.5个第一种和1个第二种这种应该也是可以的。要不然最后统计答案的时候就没法解释了… #include<bits/stdc++.h> using namespa...原创 2018-10-19 16:26:17 · 135 阅读 · 0 评论 -
HDU 2825 AC自动机+状压DP
这道题是说给定m个单词,求最少包含q个单词,长度为n的单词的种类。这道题我们先对单词建一个Trie,然后在树上dp,dp[i][j][k]表示长度为i在树上的第j个节点,使用了第K种方案的结果,第K种方案的意思是K的二进制中为1的部分表示使用过了,为0的部分表示没有使用过,最后将长度为n的使用的单次数量>=p的方案数加起来就行 #include <iostream> #inclu...原创 2018-10-10 21:54:55 · 114 阅读 · 0 评论 -
hdu 3341 AC自动机+DP
这道题就是给你N个单词,一个字符串,问你将这个字符串重排,能组成包含单词次数最多的字符串有多长。这道题的DP方程有点意思,因为只有四个字符ACGT,字符串的长度不超过40,所以我们可以dp[i][a][b[][c][d],表示匹配了i个字符,用了分别用了a,b,c,d个ACGT,能包含的最多的单词。其中但dp[500][40][40][40][40]的内存,但我们可以转化一下,转化成在某种进制下的...原创 2018-10-17 20:53:49 · 148 阅读 · 0 评论 -
zoj 3494 AC自动机+数位DP
这道题说实话我到现在也不能完整的把这份代码写出来,大部分都是抄kuangbin博客里的那份代码,其实这份代码让我让我一个人看我差不多能看懂,但让我写我感觉我根本写不了,首先我们对模式串建一个AC自动机,然后构造出来一些不可达的点,再写成一个矩阵bcd[i][j]表示在AC自动机上第i个点加上j后能到达的点,j是十进制,从0到9,然后再在bcd[i][j]上跑数位DP,我还回头写了两道数位DP想了想...原创 2018-10-24 17:02:31 · 174 阅读 · 0 评论