AC 自动机上 DP】的更多相关文章

点此看题面 大致题意: 给你\(n\)个字符串,问你有多少个长度为\(L\)的字符串,使得这些字符串都是它的子串.若个数不大于\(42\),按字典序输出所有方案. 状压 显然,由于\(n\)很小,我们可以把每个字符串是否出现过状压起来. 这样就可以起到极大的优化作用. 我们可以对每个节点开一个变量\(Ex\)记录一下该节点存在哪些字符串,转移起来就很方便了. \(AC\)自动机上\(DP\) 由于和子串有关,这题可以看做是一个多模匹配问题. 所以,我们考虑建出\(AC\)自动机. 然后,我们就可…
Problem E: Passwords \[ Time Limit: 1 s \quad Memory Limit: 256 MiB \] 题意 给出两个正整数\(A,B\),再给出\(n\)个字符串,然后问你满足条件的字符串有多少种,最后答案\(\%1e6+3\).条件如下 \[ \begin{aligned} 1.&长度在A到B之间\\ 2.&所有子串不存在n个字符串中任意一个\\ 3.&模式串中,把0看成o,1看成i,3看成e,5看成s,7看成t\\ 4.&至少存在…
[Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1264  Solved: 636[Submit][Status][Discuss] Description 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数.    给定N和S,计算不大于N的幸运数个数. Input 输入的第一行包…
题目链接 蒟蒻今天终于学会了AC自动机,感觉很稳 (后一句愚人节快乐) 这题开一个f[i][j][k]表示有没有受到限制,正在枚举第j位,来到了AC自动机的第k个节点 的方案数 随后可以刷表更新 注意如果是在枚举第一位的话注意前导0 #include<cstdio> #include<algorithm> #include<cstring> #include<cctype> #include<cstdlib> #include<queue&…
题目大意 在一种语言中的字母表中有N(N<=50)个字母,每个单词都由M(M<=50)个字母构成,因此,一共可以形成N^M个单词.但是有P(P<=10)个串是被禁止的,也就是说,任何单词的子串都不能包含这P个串中的任意一个.问按照上述规则,能产生的合法串一共有多少个? 例如:N=3 M=3 P=3 字母表中的三个字符是QWE 被禁止的串为”QQ”,”WEE”,”Q”,则合法的串一共有7个. 这题目相当于通过步数对AC自动机上每一个点的状态进行DP dp[i][j]表示到达i这个点,走了j…
bzoj4032/luoguP4112 [HEOI2015]最短不公共子串(后缀自动机+序列自动机上dp) bzoj Luogu 题解时间 给两个小写字母串 $ A $ , $ B $ ,请你计算: (1) $ A $ 的一个最短的子串,它不是 $ B $ 的子串 (2) $ A $ 的一个最短的子串,它不是 $ B $ 的子序列 (3) $ A $ 的一个最短的子序列,它不是 $ B $ 的子串 (4) $ A $ 的一个最短的子序列,它不是 $ B $ 的子序列 水题四合一,一题更比四题sa…
题目大意: 给定一些不合理的DNA序列,再给一段较长的dna序列,问最少修改几次可以使序列中不存在任何不合理序列,不能找到修改方法输出-1 这里你修改某一个点的DNA可能会影响后面,我们不能单纯的找匹配数,因为你找到了你也不一定有方法改变它 这里用DP来解决 判断到第i位dna , 之前dp值保存了前面dna所能到达的所有状态: dp[i][j] 也就是用了前i个dna所到达的状态至少需要修改的值 从所有状态出发,经过AGCT4种情况到达下一个状态,只要下一个状态不为非法状态即可 过程中只要判断…
题意: 给你一个母串,多个模式串及其价值,求用模式串拼接成母串(不重叠不遗漏),能获得的最大价值. 分析: ac自动机中,在字典树上查找时,用dp,dp[i]拼成母串以i为结尾的子串,获得的最大价值,dp[i]=max(dp[i],dp[i-len]+val[tmp]).,len是模式串的长度,val[tmp]为其价值. #include <cstdio> #include <cstring> #include <cmath> #include <queue>…
点此看题面 大致题意: 给你\(N\)个字符串(只含大写字母),要你求出有多少个由\(M\)个大写字母构成的字符串含有这\(N\)个字符串中的至少一个. \(AC\)自动机 看到题目,应该比较容易想到用\(AC\)自动机去做. 但是,即使用了\(AC\)自动机,这题直接求还是很麻烦,所以我们需要将题意先转化一下. 题意转化 考虑对于一个由\(M\)个大写字母构成的字符串,无非有两种情况: 第一种情况: 这个字符串中含有这\(N\)个字符串中的至少一个. 第二种情况: 这个字符串中不含这\(N\)…
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1030 题解: 鸽 #include<cstdio> #include<algorithm> #include<cstring> #define p 10007 #define N 6010 using namespace std; ,ans1,ans2=,a[N][],fail[N],q[N],f[][N]; ]; bool is[N]; void insert(…