描述

贝西在玩一款游戏,该游戏只有三个技能键 “A”“B”“C”可用,但这些键可用形成N种(1 <= N<= 20)特定的组合技。第i个组合技用一个长度为1到15的字符串S_i表示。

当贝西输入的一个字符序列和一个组合技匹配的时候,他将获得1分。特殊的,他输入的一个字符序列有可能同时和若干个组合技匹配,比如N=3时,3种组合技分别为"ABA", “CB”, 和"ABACB",若贝西输入"ABACB",他将获得3分。

若贝西输入恰好K (1 <= K <= 1,000)个字符,他最多能获得多少分?

输入

Line 1: Two space-separated integers: N and K.

Lines 2…N+1: Line i+1 contains only the string S_i, representing combo i.

输出

Line 1: A single integer, the maximum number of points Bessie can obtain.

样例输入

3 7
ABA
CB
ABACB

样例输出

4

提示

The optimal sequence of buttons in this case is ABACBCB, which gives 4 points–1 from ABA, 1 from ABACB, and 2 from CB.


每次暴力枚举下一个字符填什么在acacac自动机上dp就完了
注意下传endendend

#include<bits/stdc++.h>
using namespace std;
#define gc getchar
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
#define pb push_back
#define re register
#define cs const
#define ll long long
#define pii pair<int,int>
#define fi first
#define se second
inline void chemx(int &a,int b){a<b?a=b:0;
}
inline void chemn(int &a,int b){a>b?a=b:0;
}
const int N=305;
namespace Ac{int nxt[N][3],fail[N],end[N],tot;inline void insert(char *s){int p=0;for(int i=1,len=strlen(s+1);i<=len;i++){int c=s[i]-'A';if(!nxt[p][c])nxt[p][c]=++tot;p=nxt[p][c];}end[p]++;}queue<int> q;inline void build(){for(int i=0;i<3;i++){int v=nxt[0][i];if(v)q.push(v),fail[v]=0;}while(!q.empty()){int p=q.front();q.pop();for(int c=0;c<3;c++){int v=nxt[p][c];if(!v)nxt[p][c]=nxt[fail[p]][c];else fail[v]=nxt[fail[p]][c],q.push(v);}end[p]+=end[fail[p]];}}int f[1005][N];inline int dp(int n){memset(f,-1,sizeof(f));f[0][0]=0;for(int i=0;i<n;i++)for(int j=0;j<=tot;j++){if(f[i][j]==-1)continue;for(int c=0;c<3;c++)chemx(f[i+1][nxt[j][c]],f[i][j]+end[nxt[j][c]]);}int res=0;for(int i=0;i<=tot;i++)chemx(res,f[n][i]);return res;}
}
int n,m;
char s[N];
int main(){n=read(),m=read();for(int i=1;i<=n;i++)scanf("%s",s+1),Ac::insert(s);Ac::build();cout<<Ac::dp(m);
}

【USACO12JAN】—视频游戏的连击Video Game Combos(AC自动机+dp)相关推荐

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

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

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

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

  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. 【洛谷 P3041】 [USACO12JAN]视频游戏的连击Video Game Combos(AC自动机,dp)

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

  8. [洛谷3041]视频游戏的连击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

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

最新文章

  1. J2SE基础常见面试题目
  2. python 开发版-Micropython开发板固件烧写教程
  3. 学习笔记:验证对称二叉树
  4. as3调用java_[AS3]AMF3+JAVA的调用范例
  5. 2017计算机应用技术考研,2017年中国科学技术大学081203计算机应用技术考研专业目录与考试科目.docx...
  6. django 学习 (二) 模板
  7. shell关闭指定进程
  8. LSA类型讲解——LSA-2(第二类LSA——Network LSA)、LSA-3(第三类LSA——Network Summary LSA)详解
  9. 从资源管理器中,获取被选择的文件的路径(及文件夹)的API
  10. Android 应用开发(43)---开关按钮ToggleButton和开关Switch
  11. 二叉查找树之 Java的实现
  12. day 5 名片管理系统-文件版
  13. 数据分析的五个阶段及价值
  14. Linux—— httpd
  15. 让计算机读懂你的心 记李航老师计算机前沿讲座
  16. 采用腾讯云直播断流续播相关问题
  17. 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务
  18. 在线大学计算机资源,计算机专业常用网站及数据库-计算机及自动化专业网上资源.ppt...
  19. C语言函数while的用法
  20. 【ZLR-T81 200A漏电继电器】

热门文章

  1. 阿里ET大脑如何帮助养猪产业提升效益
  2. 重庆打造公共停车智能化管理服务平台,阿里云ET大脑牵手重庆
  3. XCZU19EG板卡设计资料:610-基于6U VPX 的FPGA XCZU19EG存储阵列
  4. 【小彬学vue系列专栏】001 | 出发吧,带上背包和Vue
  5. linux jffs2 空间满,关于MTD和jffs2文件系统,吧里的大神速来
  6. 众安在线:提出保险通证化,力推10余个区块链应用产品 |追击上市公司
  7. redhat linux 百度云,RedHat Enterprise Linux Server 5.11 6.7 7.1 7.2 百度云盘 下
  8. dell P2415Q输出4k
  9. 嗯~ o(* ̄▽ ̄*)o
  10. 纺织行业ERP系统选择哪个?