思路

简单的AC自动机上dp,暴力跳fail向子节点直接转移即可

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
int trie[400][3],Nodecnt,mark[400],fail[400],dp[1001][400],root,k,n;
char t[400];
void insert(char *s,int len){
int o=root;
for(int i=1;i<=len;i++){
if(!trie[o][s[i]-'A'])
trie[o][s[i]-'A']=++Nodecnt;
o=trie[o][s[i]-'A'];
}
mark[o]++;
}
void build_AC(void){
queue<int> q;
for(int i=0;i<3;i++){
if(trie[root][i]){
fail[trie[root][i]]=root;
q.push(trie[root][i]);
}
}
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<3;i++){
if(trie[x][i]){
fail[trie[x][i]]=trie[fail[x]][i];
q.push(trie[x][i]);
}
else{
trie[x][i]=trie[fail[x]][i];
}
}
}
}
int query(void){
int ans=0;
int o=root;
for(int i=0;i<=k;i++)
for(int j=0;j<=Nodecnt;j++)
dp[i][j]=-0x3f3f3f3f;
dp[0][o]=0;
for(int i=0;i<k;i++)
for(int j=0;j<=Nodecnt;j++){
for(int k=0;k<3;k++){
int p=trie[j][k],mid=0;
for(;p;p=fail[p])
mid+=mark[p];
dp[i+1][trie[j][k]]=max(dp[i+1][trie[j][k]],dp[i][j]+mid);
ans=max(ans,dp[i+1][trie[j][k]]);
}
}
return ans;
}
int main(){
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%s",t+1);
int lent=strlen(t+1);
insert(t,lent);
}
build_AC();
printf("%d\n",query());
return 0;
}

最新文章

  1. JS函数输出圆的半径和面积
  2. dexDebug ExecException finished with non-zero exit value 2
  3. Hbase之批量数据写入
  4. FluentData官方文档翻译
  5. ibatisnet框架使用说明
  6. string.Format组合跳转路径
  7. Hexo 官方主题 landscape-plus 优化
  8. leetcode 3Sum python
  9. 一年开发ASP.NET MVC4项目经验总结
  10. [Luogu 1516] 青蛙的约会
  11. Castle Windsor 的动态代理类如何获取实际类型
  12. 【同余方程组】POJ1006 生理周期
  13. UED视觉交互设计与流程介绍
  14. Android环境下hanlp汉字转拼音功能的使用介绍
  15. (计算几何基础 叉积) nyoj68-三点顺序
  16. CodeForces 931C Laboratory Work 水题,构造
  17. redis的安装使用以及在python中操作redis
  18. bzoj4571/luogu3293 美味 (主席树+贪心)
  19. Python学习笔记:个税起征点上调至5000,算一算少交多少税?
  20. pytest文档18-配置文件pytest.ini

热门文章

  1. Linux 内核引导选项简介
  2. codeforces 980D Perfect Groups
  3. numpy数学数据处理
  4. Linux查看磁盘空间大小命令
  5. html5水平方向重力感应
  6. mysql 2
  7. Django高级
  8. 【视频】使用fiddler开发工具进行新架构页面本地调试
  9. intelliJ IDEA之使用svn或git管理代码
  10. GitHub使用笔记1:git客户端配置多ssh key