正题

题目链接:https://www.luogu.com.cn/problem/P3041


题目大意

输入nnn个只有ABCABCABC的字符串,求一个长度为LLL的字符串中最多包含多少个子串是nnn个字符串中的一个


解题思路

考虑ACACAC自动机是如何进行匹配的,对于下一个字符,如果有路便往那个方向走去,然后统计该点沿条failfailfail到根节点所经过所有节点的值。然后如果没有继续往下走的路了就跳到该节点的failfailfail继续走(因为在求failfailfail的时候已经修改的TrieTrieTrie树上的数组,其实是可以直接往后走的)。

之后我们就有了dpdpdp的方法,valival_ivali​表示在failfailfail树上iii节点到根节点的路径上有多少个串的结束位置。fi,jf_{i,j}fi,j​表示现在填字符的iii个位置,目前在TrieTrieTrie树上节点为jjj的最大答案。之后进行dpdpdp即可

时间复杂度O(3∗∑i=1n∣si∣L)O(3*\sum_{i=1}^n |s_i|L)O(3∗∑i=1n​∣si​∣L)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=2100;
int n,L,cnt,ans;
int val[N],son[N][3],fail[N],f[N][N];
char s[N];
queue<int> q;
void Make(char *s){int x=0,len=strlen(s);for(int i=0;i<len;i++){int c=s[i]-'A';if(!son[x][c])son[x][c]=++cnt;x=son[x][c];}val[x]++;return;
}
void Get_Fail(){for(int i=0;i<3;i++)if(son[0][i])q.push(son[0][i]);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<3;i++)if(!son[x][i])son[x][i]=son[fail[x]][i];else{q.push(son[x][i]);int y=fail[x];fail[son[x][i]]=son[y][i];}val[x]+=val[fail[x]];}return;
}
int main()
{scanf("%d%d",&n,&L);for(int i=1;i<=n;i++){scanf("%s",s);Make(s);}Get_Fail();memset(f,0xcf,sizeof(f));f[0][0]=0;for(int i=1;i<=L;i++)for(int j=0;j<=cnt;j++)for(int k=0;k<3;k++){f[i][son[j][k]]=max(f[i][son[j][k]],f[i-1][j]+val[son[j][k]]);if(i==L)ans=max(ans,f[i][son[j][k]]);}printf("%d",ans);
}

P3041-[USACO12JAN]Video Game G【AC自动机,dp】相关推荐

  1. [USACO12Jan][luogu3041] Video Game Combos [AC自动机+dp]

    题面 传送门 思路 首先,有一个非常显然的思路就是dp: 设$dp[i][j]$表示前i个字符,最后一个为j 然后发现这个东西有后效性 改!设$dp[i][j]$代表前i个字符,最后15个的状态为j( ...

  2. CDOJ1633 Video Game Combos [AC自动机+dp]

    题目地址:http://acm.uestc.edu.cn/problem.php?pid=1633 AC自动机+BFS AC自动机,参见:http://www.cnblogs.com/luna-lov ...

  3. 洛谷 P3041 [USACO12JAN] Video Game Combos

    题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...

  4. uvalive4842(AC自动机+DP)

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

  5. HDU 2296 Ring AC自动机 + DP

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

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

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

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

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

  8. P3041 [USACO12JAN]Video Game Combos【AC自动机+DP】

    时空限制 1000ms / 128MB 题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', an ...

  9. 【AC自动机+DP】[USACO JAN2012 GOLD Problem 1: Video Game Combos]

    题目大意 题目大意:给定有ABC组成的串n个,然后请你生成一个长度为K的串求给定的串在生成串中最多被匹配时的次数 分析 AC自动机模板题. 构建trie,然后DP. p是当前节点,l是已经构造的串的长 ...

  10. POJ 3691 DNA repair AC自动机 + DP

    题意:给你只包含'A','G','T','C'四个字母的n个模板串和1个文本串,问你文本串改变多少个字符就可以使得文本串中没有一个模板串 解题思路: 我们可以知道  dp[i][j] 为文本串到 第i ...

最新文章

  1. 给定关键字不在字典中怎么解决_什么是字典?我们为什么要学它?你不知,现在你只需1分钟就可学会...
  2. acme云服务器生成证书_使用 acme.sh 申请 SSL 证书并且定期自动更新
  3. urlrewrite 地址重写
  4. CS 期刊哪家强?CCF 发布最新期刊分级目录!
  5. php三个表格,phpspreadsheet-excel工作表中有多个“格式为表”的表
  6. 95-31-020-ChannelGroup-DefaultChannelGroup
  7. unity 线程断点时卡机_Java使用JDI进行线上程序断点信息记录
  8. 周期信号的博里叶级数表示(连续时间)
  9. 恢复U盘分区:windows自带工具diskpart
  10. 飞秋2013官方下载
  11. ArcGIS API for javascript创建二维度地图
  12. libxml2的参考手册
  13. 小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks.
  14. 碳交易计价结算货币:理论、现实与选择
  15. 基于单片机烟雾及温度报警器-火灾监测-毕设课设资料
  16. flink sql 执行源码走读全流程
  17. UE4元数据关键字的应用与含义,函数的标记和特殊使用(三)
  18. 剖析SQL Server 2005查询通知之基础篇
  19. 14.3 类型转换前先做检查
  20. java中workbook_java workbook 类

热门文章

  1. python for net_转:.NET 4.0 下使用 Python for .NET
  2. java 代码块 作用_Java核心(三):代码块的作用
  3. php去掉查询返回的字段序列,php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回...
  4. java 毕向东 内部类_java基础内部类(毕向东老师)
  5. neo4j 查询同一节点的两个上级_WhatRoute for Mac(互联网流量诊断查询工具)
  6. MySQL分布式ID_分布式唯一ID系列(3)——数据库自增ID机制适合做分布式ID吗
  7. [SpringBoot2]文件上传_单文件与多文件上传的使用
  8. Strategy(策略)--对象行为型模式
  9. Dreamoon and Ranking Collection CodeForces - 1330A (贪心)
  10. 数据结构与算法--举例分析法- 栈的压入弹出序列