[USACO12JAN]视频游戏的连击Video Game Combos(AC自动机+DP)

Description

贝西正在打格斗游戏。游戏里只有三个按键,分别是“A”、“B”和“C”。游戏中有 N 种连击 模式,第 i 种连击模式以字符串 Si 表示,只要贝西的按键中出现了这个字符串,就算触发了一次连 击模式。不 同的连击模式是独立计算的,如果几个连击模式同时出现在贝西的按键顺序里,就算有重 叠部分, 也可以同时算作触发了多个模式。

假如有三个连击模式,分别是“AB”,“BA”,“ABC”,而贝西按下了“ABABC”,那么她一共 触发了四次 连击。假设贝西一共可以按 K 次键,那么她最多能触发多少次连击呢?

Solution

将字符串建立AC自动机

用dp[i][j]表示长度为i当前位置在自动机上j号节点上的连击数

mark[i]表示自动机上i号节点包括它的fail树上可获得的连击数

那么dp[i][T[j][k]]=max{dp[i-1][j]+mark[T[i][k]]}

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

int n,m,T[520][4],fail[520],mark[520],tot=1,q[520],f[1010][520],Ans;
char s[20];

void Insert(){
	scanf("%s",s);
	int now=1,len=strlen(s);
	for(int i=0;i<len;++i){
		if(!T[now][s[i]-64]) T[now][s[i]-64]=++tot;
		now=T[now][s[i]-64];
	}
	mark[now]++;
}

void getfail(){
	for(int i=1;i<=3;++i) T[0][i]=1;
	int k,now,h=0,t=0;q[++t]=1;
	while(h<t){
		now=q[++h];
		for(int i=1;i<=3;++i)
			if(T[now][i]){
				k=fail[now];
				while(!T[k][i]) k=fail[k];
				fail[q[++t]=T[now][i]]=T[k][i];
			}else T[now][i]=T[fail[now]][i];
		mark[now]+=mark[fail[now]];
	}
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i) Insert();
	getfail();
	memset(f,128,sizeof(f));
	f[0][1]=0;
	for(int i=1;i<=m;++i)
		for(int j=1;j<=tot;++j)
			for(int k=1;k<=3;++k)
				f[i][T[j][k]]=max(f[i][T[j][k]],f[i-1][j]+mark[T[j][k]]);
	for(int i=1;i<=tot;++i) Ans=max(Ans,f[m][i]);
	printf("%d\n",Ans);
	return 0;
}

原文地址:https://www.cnblogs.com/void-f/p/8969097.html

时间: 2024-07-31 00:13:32

[USACO12JAN]视频游戏的连击Video Game Combos(AC自动机+DP)的相关文章

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

P3041 [USACO12JAN]视频游戏的连击Video Game Combos https://www.luogu.org/problemnew/show/P3041 分析: AC自动机. 建立AC自动机,然后dp[i][j]表示经过了i个字符,到达自动机上j这个位置,的得分. 那么dp[i-1][j] + val[ch[j][k]] -> dp[i][ch[j][k]]. 表示从j点,往前走一步,加上新加一个字符产生的贡献. 代码: 1 #include<bits/stdc++.h&g

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

题面 传送门 思路 首先,有一个非常显然的思路就是dp: 设$dp[i][j]$表示前i个字符,最后一个为j 然后发现这个东西有后效性 改!设$dp[i][j]$代表前i个字符,最后15个的状态为j(压缩一下),转移的是候枚举增加那个字符,然后看从谁可以推过来 然后就TLE了,完全无压力 怎么优化这个算法? 显然,枚举完增加哪个字符以后,可以用AC自动机来实现多模匹配 然后发现:我们把j的定义变成AC自动机上面的点j,这样一个点就代表一种状态,状态之间互相不重复,而且也没有后效性 这样的定义方法

P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles

冲刺阶段的首篇题解! 题目链接:P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles: 题目概述: 总共N个游戏平台,金额上限V元,给出每个游戏平台的价钱和其上游戏数量: 每个游戏有一个花费及愉悦值,求在花费不超上限的情况下,最大的愉悦值. (1 <= N <= 50) (1 <= V <= 100,000) 每个游戏平台价格(1 <= P_i <= 1000) 每个平台游戏数量(1 <= G_i <= 10) 每个游戏价

tyvj P1519 博彩游戏(AC自动机+DP滚动数组)

P1519 博彩游戏 背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的子串,那么就中奖了,否则不中.Bob会告诉你这M个序列,和身上有的钱的总数N,当然还有R的范围.请你告诉Bob中奖的概率有多少? 输入格式 第一行三个用空格隔开的数N.M和R的范围R.其中1<=R<=9,0<N<=60,0<M<=20000.下面M行每行一个字符串(长度小于

视频游戏的连击 [USACO12JAN](AC自动机+动态规划)

传送门 默认大家都学过trie与AC自动机. 先求出fail,对于每个节点维护一个sum,sum[u]待表从根到u所形成的字符串能拿到几分.显然sum[u]=sum[fail] + (u是几个字符串的结尾). 设dp[i][j]代表长度为i到trie树上的j号节点所得的最大分数,显然有dp[i+1][j的字符k儿子] = max{dp[i+1][j的字符k儿子], dp[i][j] + sum[j的字符k儿子]} memset(dp, -1, sizeof(dp)); dp[0][1] = 0;

【AC自动机+DP】USACO2012 JAN GOLD_Video Game Combos

[题目大意] 给你个模式串(每个长度≤15,1≤N≤20),串中只含有三种字母.求一长度为K(1≤K≤1000)的字符串,使得匹配数最大(重复匹配计多次),输出最大值. [解题思路] W老师给的题,然而我不会做.呜呜呜谢谢丁爷爷教我做题,神犇丁爷爷%%%.下面都是丁爷爷的话,和我没有关系.然而丁爷爷没有博客(也许是我不造?( •? ω •? )y)现在正在码USACO给的标答… [email protected]丁爷爷 代码是我自己的,因为是用指针写的会有点长,丁爷爷的代码只有60+.总之祝丁爷

洛谷 P3041 [USACO12JAN] Video Game Combos

题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only valid buttons. Bessie may press the buttons in any order she likes; however, there are only N distinct combos possible (1 <= N <= 20). Combo i is repr

可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK

LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能.软件开发人员可以使用Video Streaming Module SDK,通过一些不同的配置来创建一些客户端/服务器应用程序.例如,如果有一个服务器需要向多个客户端发送音频/视频数据,那么就可以在服务器上创建这样的应用程序,比如多点传送或Web广播中的web多点传播.此外,当有多个捕捉点向一个源发送视频数据时,您可以创建安全/监控应用程序. 产品特征: 视频会议二进制

html5 音频和视频(audio And video)

1.音频和视频  Web 上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了一种通过 video 元素来包含视频的标准方法. 视频格式 当前,video 元素支持三种视频格式: 格式    IE Firefox Opera Chrome Safari Ogg     No 3.5+ 10.5+  5.0+ No MPEG4 9.0+  No           No 5.