[jzoj]3472. 【NOIP2013模拟联考8】匹配(match)(AC自动机+DP)
来源:互联网 发布:思迅会计软件 编辑:程序博客网 时间:2024/06/06 20:16
Problem
给定
Data constraint
30%的数据n<=10,m<=3。
60%的数据n<=40。
另有10%的数据k=0。
另有10%的数据m=1。
100%的数据n<=100,m<=10,k<=8,给定字符串长度<=30。
Solution
明眼人都看到了这里的
k 很小,是否可以考虑状压呢?但是,如何记录每一个字符串当前的状态,这是个麻烦.
AC自动机的引入
AC自动机= Trie + kmp
简单来说就是利用了KMP的思想,再用Trie去实现.
AC自动机的模型是:
给定
m 个匹配串,给定长度为n 的模式串,要求有多少个匹配串出现在模式串里.让我们来看一道裸题:http://acm.hdu.edu.cn/showproblem.php?pid=2222
AC自动机的核心是:
fail 指针.fail 指针的含义如下:- 一个节点
root 的fail 指针指向的k 的儿子中有一个root 节点字符.
- 一个节点
想要彻底弄懂
fail 指针并不是很简单,这里不详细讲述.构建
fail ,采取bfs .随后,我们扫一遍匹配串,然后如果当前节点能在Trie里继续往下走,我们就走,否则跳到
fail 指针,显然这样的策略是最优的.这里有两个小细节需要注意:
①构建
fail 时,我们的首选肯定是其父亲的fail 指针所往下的点,但事实上,大部分情况下,我们可能不能继续往下- 这时候,我们并不是直接把这个节点的
fail 指向root ,而是继续往期的fail[fail[root]] 找,一直fail−>fail−>fail…… 直到找到为止.
- 这时候,我们并不是直接把这个节点的
②在查询答案时,指针走到了一个节点
j ,不能只加上这一个节点的贡献,而要把其对应的fail−>fail−>fail…… 都给更新完.- 为了保证匹配是
O(n) 的,我们一个节点如果已经作出贡献,就标记一下,保证下次不再更新.
- 为了保证匹配是
对于这道题,如果掌握了AC自动机,那就显得非常easy了
我们显然就是设
f[i][j][s] 表示到AC自动机第i 个点,构建到了字符串的第j 位,已被匹配完的串状态为S 的方案数.枚举下一个点选什么即可.
同时也要注意“AC自动机”的注意②
- [jzoj]3472. 【NOIP2013模拟联考8】匹配(match)(AC自动机+DP)
- 3472. 【NOIP2013模拟联考8】匹配(match)
- [jzoj3472]【NOIP2013模拟联考8】匹配(match)
- 【AC自动机+DP】匹配(match)
- [jzoj]3468. 【NOIP2013模拟联考7】OSU!(osu) (期望DP)
- [jzoj]3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll)(匈牙利-二分图最大匹配)
- 【NOIP2013模拟联考12】数数(数位dp||类欧几里得)
- [jzoj]3499. 【NOIP2013模拟联考15】人类基因组(genes) (单调队列、前缀和、线段树解一题)
- [jzoj]3498. 【NOIP2013模拟联考14】图形变换(transform) (计算几何+矩阵乘法)
- [jzoj]3486. 【NOIP2013模拟联考10】道路改建(rebuild)(缩环+Tarjan+拓扑+bitset记录状态)
- [jzoj]3480. 【NOIP2013模拟联考9】阿Q的停车场(park)(线段树+堆)
- JZOJ 3498【NOIP2013模拟联考14】图形变换
- JZOJ 3447【NOIP2013模拟联考2】摘取作物
- jzoj. 3450. 【NOIP2013模拟联考3】山峰(summits)
- JZOJ 3468. 【NOIP2013模拟联考7】OSU!(osu)
- [jzoj]3479. 【NOIP2013模拟联考9】工作安排(work)
- 【JZOJ 3492】【NOIP2013模拟联考12】数数(count)
- 3492. 【NOIP2013模拟联考12】数数(count)(循环节/DP)
- 2017/11/27学习笔记 Mysql基础
- 怎么把PHP中复选框选中的多个值写入到数据库中
- Couldn't save uncommitted changes,Tried to save uncommitted changes in stash before update,but faile
- linux C 进程结束 exit与_exit函数
- 以hive为例说明程序的三种使用方式
- [jzoj]3472. 【NOIP2013模拟联考8】匹配(match)(AC自动机+DP)
- 显示中文
- vue快速入门的三个小实例
- MongoDB在windows 64下的安装方法
- Uva11987 Almost Union-Find 并查集带删除
- Could not create the view: An unexpected exception was thrown的解决方法
- 【LeetCode】491.Increasing Subsequences(Medium)解题报告
- hiho1515(加权并查集经典题)
- Hibernate中的事务