博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[USACO12JAN]Video Game Combos
阅读量:6442 次
发布时间:2019-06-23

本文共 1673 字,大约阅读时间需要 5 分钟。

AC自动机建立fail树后树上DP

# include 
# include
# include
# include
# include
# include
# define IL inline# define RG register# define ll long long# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;IL ll Read(){ RG char c = getchar(); RG ll x = 0, z = 1; for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1; for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + c - '0'; return x * z;}const int MAXN(1010);struct AC{ int fail, ch[3], num;} tree[MAXN];int n, cnt, k, f[MAXN][MAXN], ans;char t[MAXN];queue
Q;IL void Insert(){ RG int len = strlen(t), x = 0; for(RG int i = 0; i < len; i++){ if(!tree[x].ch[t[i] - 'A']) tree[x].ch[t[i] - 'A'] = ++cnt; x = tree[x].ch[t[i] - 'A']; } tree[x].num++;}IL void Bfs(){ while(!Q.empty()) Q.pop(); for(RG int i = 0; i < 3; i++) if(tree[0].ch[i]) Q.push(tree[0].ch[i]); while(!Q.empty()){ RG int u = Q.front(); Q.pop(); for(RG int i = 0; i < 3; i++) if(tree[u].ch[i]){ tree[tree[u].ch[i]].fail = tree[tree[u].fail].ch[i]; Q.push(tree[u].ch[i]); } else tree[u].ch[i] = tree[tree[u].fail].ch[i]; tree[u].num += tree[tree[u].fail].num; }}int main(){ n = Read(); k = Read(); for(RG int i = 1; i <= n; i++){ scanf(" %s", t); Insert(); } Bfs(); Fill(f, -127); f[0][0] = 0; for(RG int K = 1; K <= k; K++){ for(RG int i = 0; i <= cnt; i++) for(RG int j = 0; j < 3; j++) f[K][tree[i].ch[j]]=max(f[K][tree[i].ch[j]],f[K - 1][i] + tree[tree[i].ch[j]].num); } for(RG int i = 0; i <= cnt; i++) ans = max(ans, f[k][i]); printf("%d\n", ans); return 0;}

转载于:https://www.cnblogs.com/cjoieryl/p/8206389.html

你可能感兴趣的文章
attacking oracle with metasploit
查看>>
tar,grep与正则表达式
查看>>
Solr-4.10.x 在Tomcat下的安装
查看>>
Unity3D学习资源:委托和lambda表达式一
查看>>
基础入门_Python-模块和包.运维开发中内建模块getopt的最佳实践?
查看>>
Python 小知识点
查看>>
我的友情链接
查看>>
oerr错误查询工作的使用与ora-56729错误的处理
查看>>
CentOS6.4 安装VirtualBox
查看>>
从30岁到35岁:为你的生命多积累一些厚度
查看>>
Java中集合与数组之间的转化
查看>>
JQUERY 获取span标签id中包含-btnInnerEl的所有项
查看>>
servlet初步认识
查看>>
linux服务器 磁盘和文件系统管理(二) LVM逻辑卷管理的基本操作
查看>>
软raid之详解
查看>>
优先级队列
查看>>
centos6.9安装confluence 6.5.0
查看>>
Python 中的 10 个常见安全漏洞,以及如何避免(上)
查看>>
11.互传文件、用户配置文件和密码配置文件、用户组及用户管理
查看>>
Dubbo源码解析 — 服务引用原理
查看>>