跳表上线性dp——1150D 好题!
题目设计的很好,感觉做了这题对dp的状态有了更深的理解
/*
先预处理序列自动机
dp[i][j][k]表示匹配到i,j,k时的最靠前的位置
那么现在A串加入了一个字母,我们要求的就是dp[i+1][j][k]
根据dp的状态转移
因为 dp[i][j][k]之前的状态已经全部确定下来,
所以只要在i+1的状态下枚举两重循环jk即可
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
char s[maxn];
int n,pos[],q,nxt[maxn][];
void init(){
for(int i=;i<;i++)pos[i]=n+;
for(int i=n;i>=;i--){
for(int j=;j<;j++)
nxt[i][j]=pos[j];
pos[s[i]-'a']=i;
}
for(int i=;i<;i++)
nxt[n+][i]=n+;
} int A,B,C,dp[][][];
char a[maxn],b[maxn],c[maxn];
int main(){
scanf("%d%d%s",&n,&q,s+);
init();
char op[],ch[];int p;
while(q--){
cin>>op>>p;
if(op[]=='-'){
if(p==)A--;if(p==)B--;if(p==)C--;
}
else {
cin>>ch;
if(p==){//带A的所有新状态
a[++A]=ch[];
for(int j=;j<=B;j++)
for(int k=;k<=C;k++)
dp[A][j][k]=n+;
for(int j=;j<=B;j++)
for(int k=;k<=C;k++){
dp[A][j][k]=min(dp[A][j][k],nxt[dp[A-][j][k]][a[A]-'a']);
if(j)dp[A][j][k]=min(dp[A][j][k],nxt[dp[A][j-][k]][b[j]-'a']);
if(k)dp[A][j][k]=min(dp[A][j][k],nxt[dp[A][j][k-]][c[k]-'a']);
//cout<<dp[A][j][k]<<'\n';
}
} if(p==){
b[++B]=ch[];
for(int i=;i<=A;i++)
for(int k=;k<=C;k++)
dp[i][B][k]=n+;
for(int i=;i<=A;i++)
for(int k=;k<=C;k++){
dp[i][B][k]=min(dp[i][B][k],nxt[dp[i][B-][k]][b[B]-'a']);
if(i)dp[i][B][k]=min(dp[i][B][k],nxt[dp[i-][B][k]][a[i]-'a']);
if(k)dp[i][B][k]=min(dp[i][B][k],nxt[dp[i][B][k-]][c[k]-'a']);
}
} if(p==){
c[++C]=ch[];
for(int i=;i<=A;i++)
for(int j=;j<=B;j++)
dp[i][j][C]=n+;
for(int i=;i<=A;i++)
for(int j=;j<=B;j++){
dp[i][j][C]=min(dp[i][j][C],nxt[dp[i][j][C-]][c[C]-'a']);
if(i)dp[i][j][C]=min(dp[i][j][C],nxt[dp[i-][j][C]][a[i]-'a']);
if(j)dp[i][j][C]=min(dp[i][j][C],nxt[dp[i][j-][C]][b[j]-'a']);
}
}
}
// cout<<dp[A][B][C]<<'\n';
if(dp[A][B][C]!=n+)puts("YES");
else puts("NO");
}
}
跳表上线性dp——1150D 好题!的更多相关文章
- 线性dp——cf1012C好题
比较套路的dp题 /* dp[i][j][0|1]:前i座山盖了j座房子,第i座不盖|盖 dp[i][j][0]=min( dp[i-1][j][0] , dp[i-1][j][1]+max(0,a[ ...
- zoj4027 线性dp!好题
非常好的dp,可是我太菜做不出来.. /* 第i个左括号不可能越过第i+1个左括号 如果第i个左括号到位置j,前提是第i+1个左括号就必须到位置j+1即以后 用dp[i][j]表示把第i个左括号转移到 ...
- 单调队列+线性dp题Watching Fireworks is Fun (CF372C)
一.Watching Fireworks is Fun(紫题) 题目:一个城镇有n个区域,从左到右1编号为n,每个区域之间距离1个单位距离节日中有m个烟火要放,给定放的地点ai,时间ti当时你在x,那 ...
- [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题
题目来源: Codeforces - 1110D 题意:你有n张牌(1,2,3,...,m)你要尽可能多的打出[x,x+1,x+2] 或者[x,x,x]的牌型,问最多能打出多少种牌 思路: 1.三组[ ...
- lettcode 上的几道哈希表与链表组合的数据结构题
目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...
- cf909C 线性dp+滚动数组好题!
一开始一直以为是区间dp.. /* f下面必须有一个s 其余的s可以和任意f进行匹配 所以用线性dp来做 先预处理一下: fffssfsfs==>3 0 1 1 dp[i][j] 表示第i行缩进 ...
- Nowcoder Removal ( 字符串上的线性 DP )
题目链接 题意 : 给出长度为 n 的字符串.问你准确删除 m 个元素之后.能产生多少种不同的子串 分析 ( 参考博客 ): 可以考虑线性 DP 解决这个问题 试着如下定义动态规划数组 dp[i][ ...
- 线性dp
线性dp应该是dp中比较简单的一类,不过也有难的.(矩乘优化递推请出门右转) 线性dp一般是用前面的状态去推后面的,也有用后面往前面推的,这时候把循环顺序倒一倒就行了.如果有的题又要从前往后推又要从后 ...
- 机器分配----线性dp难题(对于我来说)
题目: 总公司拥有高效设备M台, 准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M <= 15, ...
随机推荐
- 最详尽使用指南:超快上手Jupyter Notebook
最详尽使用指南:超快上手Jupyter Notebook - CSDN博客https://blog.csdn.net/DataCastle/article/details/78890469
- Day 13 : 函数递归,
从前有有座山,山里有座庙,庙里有个老和尚给小和尚们讲故事,讲的什么呀,讲的是,从前有有座山,山里有座庙,庙里有个老和尚给小和尚们讲故事,讲的什么呀?讲的是?...... 递归:1.一个函数再内部调用了 ...
- Centos 7 ping 不通外网
首先检查添加DNS是否正常,如不存在则添加dns: [root@cgls]# vim /etc/resolv.conf nameserver 114.114.114.114 nameserver 8. ...
- spring boot thymeleaf简单示例
说实话,用起来很难受,但是人家官方推荐,咱得学 如果打成jar,这个就合适了,jsp需要容器支持 引入依赖 <dependency> <groupId>org.springfr ...
- Redis事务,持久化,哨兵机制
1 Redis事务 基本事务指令 Redis提供了一定的事务支持,可以保证一组操作原子执行不被打断,但是如果执行中出现错误,事务不能回滚,Redis未提供回滚支持. multi 开启事务 exec 执 ...
- iOS进阶二-KVC
概述 KVC的全程是Key-Value Coding, 俗称"键值编码",可以通过一个key来访问属性 常见的AP有 - (void)setValue:(nullable id)v ...
- iOS开发系列-定时器强引用问题
概述 iOS开发中常用的定时器NSTimer.CADisplayLink. NSTimer 和 CADisplayLink 基本使用 NSTimer的创建方法有两个scheduledTimerWith ...
- linux命令输出到屏幕的同时保存到文件
有时候无法在一个屏幕中打印出所有显示内容 可以使用以下命令: ifconfig | tee ifconfig.log more ifconfig.log
- PHP算法之转换成小写字母
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串. 示例 1: 输入: "Hello"输出: &q ...
- BCZM : 1.6
https://blog.csdn.net/kabini/article/details/2311946 题目大意: 水房能容纳饮料的总量是V,有一批饮料,每种饮料单个容量都是2的方幂,每种饮料信息如 ...