
AC自动机
文章平均质量分 87
cscoder
这个作者很懒,什么都没留下…
展开
-
POJ 1625 Censored!
Censored! 这个题目写了一天多的时间,开始的时候,虽然对主要的思路清楚了,但是有些细节问题没有想清楚。在解DP的时候,开始写的时候没有对状态转化搞的很清楚,所以中间出现错误然后又调试了很久,这就浪费了很长的时间。以后还是想清楚细节之后再去敲代码,得训练一下写代码的思维,如何思考更有利于写代码,而不仅仅是注重于问题的解法是什么。 说下这个题目我个人的想法:先建立tri原创 2012-08-16 14:57:40 · 775 阅读 · 0 评论 -
POJ 3691 and Hduoj 2457 DNA repair
POJ 3691 DNA repair Hduoj 2457 DNA repair AC自动机+DP。先建立AC自动机,再来看DP。和前面类似考虑方程的时候我们可以结合字符串的长度与AC自动机的状态,来写方程。设dp[i][j]是单词长度为i走到j时最少需要修改单词的个数。那么考虑状态的转化,由于要不含致病基因,那么也就是状态不能走到叶节点。考虑状态j是由那些转化而来的原创 2012-08-17 16:53:07 · 561 阅读 · 0 评论 -
Hduoj 2243 考研路茫茫——单词情结
考研路茫茫——单词情结 自动机+DP+快速幂取模+矩阵快速幂。这个题目和POJ2778很相似,不过这个是求出包含的有多少个。也就是用总的个数减去不包含的。由于长度是1~L内的,所以我们得把所有的情况都给求出来。首先是求构成单词的总的个数,也就是:26^1 + 26^2 + 26^3 +....+ 26^L,当然我们可以将其写成更一般的形式:26*(26^L -1)/25,但是这样计算有很大的问题原创 2012-08-17 11:01:15 · 3933 阅读 · 0 评论 -
Hduoj 2296 Ring
Ring AC自动机+DP。方程很容易写出来,但是对于串的处理确实比较麻烦的。首先方程:dp[i][j] = max{ dp[i-1][k] + tag[j] },这里tag[j]表示到达j状态时所有的匹配得到的数目之和。在递推的时候我们需要注意如果一个状态没有被经过(或者说是没有到达),那么是不能用这个状态来递推到下一个状态的。所以在写的时候有长度为i的到长度为i+1的会更容易写。然后原创 2012-08-20 21:53:13 · 450 阅读 · 0 评论 -
POJ 2778 DNA Sequence
DNA Sequence 自动机的又一题。这个题目和前面的那个题目POJ1625很相似,不过POJ1625的数据范围没有这么大,如果按照那个题目那样递推过来的话,肯定会超时。对于这么大的数据,一般会想到加速计算,多采用二分法,例如:快速幂取模,矩阵快速幂。而这个题目就是用矩阵快速幂来加速计算的。和前面一样我们可以很容易的写出状态转移方程,其实是一样的方程,这里就不再写了。我们把这个原创 2012-08-16 19:48:56 · 469 阅读 · 0 评论 -
hdu 2825 Wireless Password
Wireless Password AC 自动机+ DP 题目意思:给定M个子串,现需要构造一个长度为N的串使得该串中至少包含K个子串,求有多少中构造方法。开始的时候错误的理解题目意思:认为只需要包含k个字串(允许重复)。。。现在状态就很容易写了。dp[i][j][k] 长度为i处于j状态的包含的字串的情况为k的可能串的个数, 方程就可以直接得到了,这里就不写了,参看程序。。原创 2012-11-01 13:55:57 · 565 阅读 · 0 评论