SPOJ VIDEO Video game combos 题解
SP10502 VIDEO - Video game combos
AC 自动机上的动态规划。
由题目中这句话,不难想到 AC 自动机:
\(s_i\) 在 \(t\) 中出现一次指的是 \(s_i\) 是 \(t\) 从某个位置起的连续子串。如果 \(s_i\) 从 \(t\) 的多个位置起都是连续子串,那么算作 \(s_i\) 出现了多次。
考虑到每个位置有多种转移情况,且满足最优子结构性质,使用动态规划。观察后发现确定一个位置需要两个参数:目前是主串的的 \(i\) 个字符,目前在 AC 自动机中的位置 \(j\)。易得转移方程:
\]
这里 \(k\) 是枚举 AC 自动机中的出边,\(h[i]\) 表示在 AC 自动机中的位置 \(i\) 匹配可以得到的分数。实质上,这是一个根据现在的状态推出后面状态的方程,所以 \(\max\) 里会有 \(dp[i+1][trie[j][k]]\) 这一项,而后面一项则是目前枚举的状态转移之后的得分。
这里把 \(h[i]\) 预处理出来了,实际上不预处理应该也是可以的。
注意状态需要初始化为负无穷,很明显是不能从不可能的状态转移的。
#include <bits/stdc++.h>
using namespace std;
int n,k,ans,trie[310][3],ap[310],fail[310],que[310],f[1010][310],h[310],cnt=0;
char str[310];
void insert(char str[])
{
int l=strlen(str),root=0;
for(int i=0;i<l;i++)
{
int id=str[i]-'A';
if(!trie[root][id])trie[root][id]=++cnt;
root=trie[root][id];
}
ap[root]++;
}
void build_ac()
{
int head=0,tail=0;
fail[0]=0;
for(int i=0;i<3;i++)
if(trie[0][i])que[tail++]=trie[0][i];
while(head<tail)
{
int now=que[head];
for(int i=0;i<3;i++)
if(trie[now][i])fail[trie[now][i]]=trie[fail[now]][i],que[tail++]=trie[now][i];
else trie[now][i]=trie[fail[now]][i];
head++;
}
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%s",str);
insert(str);
}
build_ac();
for(int i=0;i<=cnt;i++)
for(int j=i;j!=0;j=fail[j])h[i]+=ap[j];
for(int i=0;i<=k;i++)
for(int j=0;j<=cnt;j++)
f[i][j]=-99999999;
f[0][0]=0;
for(int i=0;i<k;i++)
for(int j=0;j<=cnt;j++)
for(int k=0;k<3;k++)
f[i+1][trie[j][k]]=max(f[i+1][trie[j][k]],f[i][j]+h[trie[j][k]]);
for(int i=0;i<=cnt;i++)
ans=max(ans,f[k][i]);
printf("%d",ans);
return 0;
}
SPOJ VIDEO Video game combos 题解的更多相关文章
- HTML<video></video>视频无法自动播放
1.video 标签属性 src: 设置显示视频路径 controls: 显示控制栏 loop: 控制视频循环播放 autoplay: 自动播放 muted:设置静音播放 2.解决视频或音频标签自动播 ...
- SPOJ LAS(BFS)题解
题目:VJ 思路: BFS+回溯,但是要剪枝,看了dalao的题解,超时+WA无数发,终于过了 #include<cstdio> #include<cstring> #incl ...
- SPOJ 703 SERVICE - Mobile Service 题解
题面 好题啊!~ 设f[i][j][k][l]表示已经处理完前i个请求后,a在j,b在k,c在l的最小值是多少: 那么f[i][p[i]][k][l]=min(f[i][p[i]][k][l],f[i ...
- 移动端HTML5<video>视频播放优化实践
遇到的挑战 移动端HTML5使用原生<video>标签播放视频,要做到两个基本原则,速度快和体验佳,先来分析一下这两个问题. 下载速度 以一个8s短视频为例,wifi环境下提供的高清视频达 ...
- HTML5 视频(二) <video> 使用 DOM 进行控制
HTML5 <video> 使用 DOM 进行控制 一.HTML5 <video> 元素同样拥有方法.属性和事件. 其中的方法用于播放.暂停以及加载等.其中的属性(比如时长.音 ...
- video 手机全屏自动播放
<video src="video.mp4" id="video" x-webkit-airplay="true" webkit-pl ...
- HTML5 <video> - 使用 DOM 进行控制
HTML5 <video> 元素同样拥有方法.属性和事件. 其中的方法用于播放.暂停以及加载等.其中的属性(比如时长.音量等)可以被读取或设置.其中的 DOM 事件能够通知您,比方说,&l ...
- 习课的视频播放器 video.js
jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncod ...
- 移动端HTML5<video>视频播放优化实践[转]
http://blog.csdn.net/u010918416/article/details/52705732 http://www.xuanfengge.com/html5-video-play. ...
- HTML5 video 和 audio
video 用于在HTML或者XHTML文档中嵌入视频内容 使用 video 元素至少要提供两种视频格式的文件:OGG 和 MP4 OGG:采用 Theora 视频格式和 Vorbis 音频解码器 ( ...
随机推荐
- 修显示器led屏幕能亮但是显示异常
用电吹风热风大风 对着显示器的 ' led 区域 ' 吹十分钟 吹显示器线插口 电源线 插口 机箱 断电吹 // 温度挺高 还得吹显卡接口 线也要换新的 插口需要用线的接口 打磨金属 ...
- 详细介绍Java的SPI机制
一.什么是SPI机制 SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.s ...
- 🎀avif转png在线工具推荐
简介 本文为avif格式图片转png图片在线工具推荐 工具 https://convertio.co/zh/avif-png/ 使用 上传avif图片 选择转换的格式 点击转换 下载 结束
- 🎀Nginx 安全设置(禁止Iframe跨域访问、隐藏server、限制ip访问)
1.安装[headers-more-nginx-module]模块,自定义nginx头信息 2.禁止Iframe跨域请求 more_set_headers 'X-Frame-Options SAMEO ...
- Vue(六)——条件渲染
Vue--条件渲染 v-if.v-else-if.v-else v-if 指令用于条件性地渲染一块内容,表达式的值为 true --渲染. false--不渲染 v-if.v-else-if.v-el ...
- 太喜欢啦,浏览器中的SQL神器:WhatTheDuck让CSV分析像聊天一样简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 基于DuckDB的轻量级Web应用 | 完全浏览器端运行 | 零数据泄露风险 | 支持复杂S ...
- 全国海域潮汐表查询微信小程序详情教程及代码
最近在做一个全国海域潮汐表查询,可以为赶海钓鱼爱好者提供涨潮退潮时间表及潮高信息.下面教大家怎么做一个这样的小程序.主要功能,根据IP定位地理位置,自动查询出省份或城市的港口,进入后预测7天内港口潮汐 ...
- 操作系统综合题之“采用记录型信号量机制实现进程INPUT、PROCESS和OUTPUT的同步算法(代码补充)”
1.问题:系统中有有三个进程INPUT.PROCESS和OUTPUT,共用两个缓冲区BUF1和BUF2.假期设BUF1中最多可放10个数据,现已放入了2个数据:BUF2最多可放5个数据.INPUT进程 ...
- 三-select模型
select模型是对简单C/S模型的优化,他解决了accept函数阻塞等待连接的问题.并且允许应用程序同时监视多个套接字,从而实现简单的并发请求.通过调用select函数确认一个或多个套接字当前的状态 ...
- 【拥抱鸿蒙】基于 Cocos Creator 的 HarmonyOS 自动构建
概述 随着 Cocos Creator 新版本的发布,开发者们迎来了一个令人振奋的消息:Cocos Creator 现已支持发布到 HarmonyOS 平台.这为游戏开发者和应用开发者开辟了新的天地, ...