题目链接
手写一下AC自动机(我可没说我之前不是手写的)
Trie上dp,每个点的贡献加上所有是他后缀的串的贡献,也就是这个点到根的fail链的和。

#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXK = 1010;
const int MAXN = 1010;
struct ACA{int next[5], num, fail;
}AC[MAXN];
int f[MAXK][MAXN];
int n, k, cnt, ans;
char a[30];
queue <int> q;
void insert(){int len = strlen(a + 1), p = 0, w;for(int i = 1; i <= len; ++i){w = a[i] - 'A';if(!AC[p].next[w])AC[p].next[w] = ++cnt;p = AC[p].next[w];}++AC[p].num;
}
void build(){int now;for(int i = 0; i < 3; ++i)if(AC[0].next[i])q.push(AC[0].next[i]);while(q.size()){now = q.front(); q.pop();for(int i = 0; i < 3; ++i)if(AC[now].next[i]){AC[AC[now].next[i]].fail = AC[AC[now].fail].next[i];q.push(AC[now].next[i]);}else AC[now].next[i] = AC[AC[now].fail].next[i];AC[now].num += AC[AC[now].fail].num;}
}
void dp(){for(int i = 0; i <= k; ++i)for(int j = 1; j <= cnt; ++j)f[i][j] = -2147483647;for(int i = 1; i <= k; ++i)for(int j = 0; j <= cnt; ++j){for(int k = 0; k < 3; ++k)f[i][AC[j].next[k]] = max(f[i][AC[j].next[k]], f[i - 1][j] + AC[AC[j].next[k]].num);}for(int i = 1; i <= cnt; ++i)ans = max(ans, f[k][i]);
}
int main(){scanf("%d%d", &n, &k);for(int i = 1; i <= n; ++i){scanf("%s", a + 1);insert();}build();dp();printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/Qihoo360/p/10918586.html

【洛谷 P3041】 [USACO12JAN]视频游戏的连击Video Game Combos(AC自动机,dp)相关推荐

  1. luogu P3041 [USACO12JAN]视频游戏的连击Video Game Combos

    P3041 [USACO12JAN]视频游戏的连击Video Game Combos 题目大意: 给出n个字符串st[1-n],求一个长度为K的字符串,每匹配到st中的字符串就+1分,问最多能加几分 ...

  2. 洛谷 P3041 视频游戏的连击Video Game Combos(AC自动机+拓扑排序+数位DP)

    洛谷 P3041 视频游戏的连击Video Game Combos 难度一般,不过这个数位DP其实应该叫做记忆化搜索 题意:玩游戏时可以通过按键组合打出combo技能:然后是已知N个combo的按键方 ...

  3. P3041 [USACO12JAN]视频游戏的连击Video Game Combos

    题意:贝西在玩一款游戏,该游戏只有三个技能键 "A""B""C"可用,但这些键可用形成N种(1 <= N<= 20)特定的组合技 ...

  4. 【题解】[USACO12JAN]视频游戏的连击Video Game Combos

    好久没有写博客了,好惭愧啊--虽然这是一道弱题但还是写一下吧. 这道题目的思路应该说是很容易形成:字符串+最大值?自然联想到学过的AC自动机与DP.对于给定的字符串建立出AC自动机,dp状态dp[i] ...

  5. [Luogu3041][USACO12JAN]视频游戏的连击Video Game Combos

    题面 sol 设\(f_{i,j}\)表示填了前\(i\)个字母,在\(AC\)自动机上跑到了节点\(j\)的最大得分.因为匹配需要暴跳\(fail\)所以预先把\(fail\)指针上面的匹配数传下来 ...

  6. [USACO12JAN]视频游戏的连击Video Game Combos

    很早之前就做过啦 补一下题解 F(i,j)前i个的字符为j的匹配 注意end要累加 #include<iostream> #include<cstdio> #include&l ...

  7. [洛谷3041]视频游戏的连击Video Game Combos

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

  8. 【USACO12JAN】视频游戏的连击Video Game Combos

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

  9. 【USACO12JAN】—视频游戏的连击Video Game Combos(AC自动机+dp)

    描述 贝西在玩一款游戏,该游戏只有三个技能键 "A""B""C"可用,但这些键可用形成N种(1 <= N<= 20)特定的组合技 ...

最新文章

  1. Centos下运行gpg --gen-key生成key时出现卡住解决方案笔记
  2. Java中的异常处理
  3. str_pad函数php,str_pad
  4. php解析url并得到url中的参数及获取url参数的四种方式
  5. 解决开源矿工笔记本屏幕不能关闭的问题
  6. matlab函数参数命令,matlab函数文件中的输出参数如何不在命令窗口显示
  7. 山西职业技术学院计算机宿舍怎么样,山西职业技术学院宿舍怎么样
  8. java泛型 之 入门(interface)
  9. 凸优化第五章对偶 5.9 广义不等式
  10. webstorm运行的端口在哪看_webstorm(10.0.2)的端口号修改
  11. 朋友圈营销:如何做好个人IP打造吸金朋友圈?(内附思维导图)
  12. sw工程图导出bom_SOLIDWORKS如何快速生成BOM表格
  13. 蒙牛新品来了,小明纯牛奶透明袋
  14. Windows 11 配置使用 Edge 浏览器的 IE 兼容模式(永久)
  15. Photoshop抠图--使用图层蒙版抠图
  16. 如何提取网易公开课的音频
  17. 游戏引擎架构-学习笔记
  18. ios 自定义滑杆
  19. NEFU ERP 企业资源计划[1] 详细知识点
  20. 文字转语音的配音软件,萝莉等语音资源可以自行编辑声音文本内容

热门文章

  1. Word文件如何锁定格式不乱跑?
  2. 语言识别器需要重点学习哪些?
  3. CC2530学习温湿度传感器DHT11
  4. 新东方雅思词汇---7.2、warrant
  5. 关于做用户修改自我信息时遇到的问题,以及当前解决方法
  6. 研究生哪个含金量最高?
  7. 众安在线:提出保险通证化,力推10余个区块链应用产品 |追击上市公司
  8. 基于Matlab模拟、检测和跟踪飞机着陆进场中异常的仿真(附源码)
  9. DS1302时钟总结
  10. CentOS7上 定时执行sql文件,恢复数据库内的数据