传送门1
传送门2
写在前面:明天开始种树吗?
思路:感觉和Wireless Password有点像?f[i][j][k]表示到长度为i的字符串匹配到了自动机的节点j,k=1说明已经有可认识的单词,k=0表示没有。状态方程应该比较好想了吧,如果仍然不懂可以戳一下链接,这个题还不是状压呢。
(快速打完后样例过,但数组开小了导致RE,开大后交上去WA一半,发现建fail指针时对节点i没有处理num[i]和num[fail[i]]的关系,如果num[fail[i]]是1的话那么num[i]也应该是1,加了一步就A了……)
(Po姐的题解说可以用减法原理= =)
注意:好像要注意的已经在思路里说过了……
代码:

#include<bits/stdc++.h>
#define mod 10007
using namespace std;
int n,m,root=1,tot=1;
int trie[11000][26],fail[11000],f[103][10003][2];
char s[110];
bool num[11000];
queue<int>q;
void insert(char s[])
{int len=strlen(s),now=root;for (int i=0;i<len;i++){if (!trie[now][s[i]-'A']) trie[now][s[i]-'A']=++tot;now=trie[now][s[i]-'A'];}num[now]=1;
}
void build()
{int now,tmp;q.push(root);while (!q.empty()){now=q.front();q.pop();num[now]|=num[fail[now]];for (int i=0;i<26;i++)if (trie[now][i]){tmp=fail[now];while (tmp&&!trie[tmp][i]) tmp=fail[tmp];if (tmp&&now!=root) fail[trie[now][i]]=trie[tmp][i];else fail[trie[now][i]]=root;q.push(trie[now][i]);}else{if (now==root) trie[now][i]=root;else trie[now][i]=trie[fail[now]][i];}}
}
main()
{scanf("%d%d",&n,&m);int x,y,z,ans=0;for (int i=1;i<=n;i++)scanf("%s",s),insert(s);build();f[0][1][0]=1;for (int i=0;i<m;i++)for (int j=1;j<=tot;j++)for (int k=0;k<2;k++)for (int l=0;l<26;l++)x=i+1,y=trie[j][l],z=k|num[y],f[x][y][z]=(f[x][y][z]+f[i][j][k])%mod;for (int i=1;i<=tot;i++)ans=(ans+f[m][i][1])%mod;printf("%d",ans);
}

【BZOJ1030】【Tyvj1806】文本生成器,AC自动机+DP相关推荐

  1. [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)

    题目传送门 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...

  2. [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 dp)

    Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...

  3. BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 3953  Solved: 1614 [Submit][St ...

  4. 1030: [JSOI2007]文本生成器 ac自动机+dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...

  5. bzoj1030 [JSOI2007] 文本生成器(ACAM+dp)

    求长度为m的,至少包含一个模式串的文本串个数. 我们考虑用所有的个数26m26^m减去一个模式串也不包含的个数. 后者我们可以建出ACAM,然后在ACAM上跑dp即可. #include <cs ...

  6. bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5187  Solved: 2136 [Submit][St ...

  7. HDU 2296 Ring AC自动机 + DP

    题意:给你n个模式串,每个模式串有一个得分,让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的. 解题思路:  AC自动机 + DP , 不过要输出字典序列最小,多开一个 一个三维字符串 ...

  8. uvalive4842(AC自动机+DP)

    题意: 给出猴子打字时打某个字母的概率,猴子最多可以敲键盘m次,问得到的长度是m的单词包含模式串的概率. 思路: AC自动机+dp. 首先,我们用模式串构造一个AC自动机,用dp[i]][j]表示当前 ...

  9. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

  10. [BZOJ1030] [JSOI2007]文本生成器

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Description JSOI交给队员ZYX一个任务,编制一个称之为&qu ...

最新文章

  1. 数据处理遇到麻烦不要慌,5个优雅的Numpy函数助你走出困境
  2. nvm 装 nodejs 重启终端失效的解决方法
  3. Python 重写父类方法
  4. python中怎么比较两个列表的大小_在Python中比较两个大小不同的列表
  5. 60+ 实用 React 工具库,助力你高效开发!
  6. IP,VIP,SCAN IP之间的关系是怎么样的呢?
  7. html5点击事件_lt;dialoggt; | HTML5 对话框标签
  8. oracle中sql语句 日期加减,SQL语句里对日期进行相加减
  9. Java IO流体系图(图)
  10. html家庭家谱网页,怎样编写自己小家庭的家谱
  11. 华为防火墙USG6309E开局基础配置之安全策略
  12. 微信公众号账号登录功能实现
  13. 计算机兴趣小组活动实施方式,信息技术兴趣小组活动总结范文(通用5篇)
  14. typhon例子:cs,bufDataset(类似delphi的clientDataset),josn解析器
  15. 汽车不同的电源接通状态
  16. ADSO中的表和视图
  17. csgo怎么修改服务器的tick,CSGO:关于tick,你真的知道吗?
  18. 移动硬盘直接拔出后无法读取
  19. 技术图文:基于《权力的游戏》数据集学Pandas
  20. PC端通过WiFi热点共享代理

热门文章

  1. 邢台学计算机的技校有哪些,邢台技校有哪些,邢台技校排名
  2. php一定要用phpstudy,用phpstudy有什么好处
  3. 韩顺平php视频笔记77 抽象类vs接口 关键字final const
  4. 关于pytorch里面的图像变换
  5. Scikit_Learn介绍及演练
  6. Go编译exe程序时指定程序图标
  7. ibm服务器无显示器,IBM 2128彩色显示器,无论有无连机信号输入均黑屏
  8. Spring-Data-JPA入门--增删改查1
  9. 台式电脑键盘按键错乱_电脑键盘按键怕误触怎么办?用这款软件帮你屏蔽指定键盘按键!支持替换按键!...
  10. oracle anonhugepage,案例:Oracle linux redhat检查Transparent HugePages状态并关闭