AC自动机
Daniel__d
这个作者很懒,什么都没留下…
展开
-
HDU2243-AC自动机+矩阵快速幂
HDU2243题目描述长度不超过LLL,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?这里就不考虑单词是否有实际意义。题解先考虑直接dp转移,但是考虑到nnn的大小,显然会T掉。考虑矩阵乘法,ans=总方案数−不含词根的单词ans=总方案数-不含词根的单词ans=总方案数−不含词根的单词;首先前半部分是一个幂和的形式:An=261+...+26nSn=An+1=260+261+...+26nSn+1=26Sn+1A_n=26^1+...+26^n\\S_n=A_n+1=2原创 2020-08-04 21:15:12 · 253 阅读 · 1 评论 -
POJ2778-AC自动机,矩阵快速幂优化DP
POJ2778题目描述简要题意:给出mmm个病毒串,问你由ATGCATGCATGC构成的长度为 nnn 且不包含这些病毒串的字符串有多少个?题解定义dp[i][j]=dp[当前长度为i][当前在AC自动机的第j个节点]=方案数dp[i][j]=dp[当前长度为i][当前在AC自动机的第j个节点]=方案数dp[i][j]=dp[当前长度为i][当前在AC自动机的第j个节点]=方案数.转移方程也十分简单.但是注意到nnn的大小,显然会T到飞起,考虑矩阵乘法优化,其实再转化一下题意就是:全图中的000原创 2020-07-30 13:47:32 · 207 阅读 · 0 评论 -
HDU4758-AC自动机+状压dp
HDU4758题目描述题解代码#include<bits/stdc++.h>using namespace std;int f[105][105][305][4],tr[551][2],val[550],cnt,n,m,ans,fail[550],a[2],b[2],t;char s[150];const int mod=1000000007;void clear(){ cnt=ans=0; memset(tr,0,sizeof(tr)); memset(val,0,si原创 2020-07-26 11:14:11 · 135 阅读 · 0 评论 -
HDU3341-AC自动机+dp
HDU3341题目描述题解代码#include<bits/stdc++.h>//细节较多 using namespace std;int tr[505][5],val[505],fail[505],has[41][41][41][41],dp[505][15009],n,ans,tot,cnt,num[5],a[5];char s[50]; void clear(){ tot=cnt=ans=0; memset(tr,0,sizeof(tr)); memset(val,0,原创 2020-07-26 10:57:32 · 151 阅读 · 0 评论 -
HDU2825-AC自动机+状压dp
HDU2825题目描述题解代码#include<bits/stdc++.h>using namespace std;int dp[28][110][1<<10],tr[110][26],val[110],cnt,n,m,kk,ans,fail[110];char s[15];const int mod=20090717;void clear(){ cnt=ans=0; memset(tr,0,sizeof(tr)); memset(val,0,sizeof(v原创 2020-07-26 10:51:33 · 206 阅读 · 0 评论 -
AC自动机板子
#include<bits/stdc++.h>//P3808 #define M 1000007using namespace std;int trie[M][26],cnt,val[M],last[M],fail[M],n;char s[M];void build(){ int u=0; int len=strlen(s); for(int i=0;i<len;i++){//建立trie树 int c=s[i]-'a'; if(!trie[u][c]) trie原创 2020-07-22 10:39:33 · 142 阅读 · 0 评论