题目设计的很好,感觉做了这题对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 好题!的更多相关文章

  1. 线性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[ ...

  2. zoj4027 线性dp!好题

    非常好的dp,可是我太菜做不出来.. /* 第i个左括号不可能越过第i+1个左括号 如果第i个左括号到位置j,前提是第i+1个左括号就必须到位置j+1即以后 用dp[i][j]表示把第i个左括号转移到 ...

  3. 单调队列+线性dp题Watching Fireworks is Fun (CF372C)

    一.Watching Fireworks is Fun(紫题) 题目:一个城镇有n个区域,从左到右1编号为n,每个区域之间距离1个单位距离节日中有m个烟火要放,给定放的地点ai,时间ti当时你在x,那 ...

  4. [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题

    题目来源: Codeforces - 1110D 题意:你有n张牌(1,2,3,...,m)你要尽可能多的打出[x,x+1,x+2] 或者[x,x,x]的牌型,问最多能打出多少种牌 思路: 1.三组[ ...

  5. lettcode 上的几道哈希表与链表组合的数据结构题

    目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...

  6. cf909C 线性dp+滚动数组好题!

    一开始一直以为是区间dp.. /* f下面必须有一个s 其余的s可以和任意f进行匹配 所以用线性dp来做 先预处理一下: fffssfsfs==>3 0 1 1 dp[i][j] 表示第i行缩进 ...

  7. Nowcoder Removal ( 字符串上的线性 DP )

    题目链接 题意 : 给出长度为 n 的字符串.问你准确删除 m 个元素之后.能产生多少种不同的子串 分析 ( 参考博客 ):  可以考虑线性 DP 解决这个问题 试着如下定义动态规划数组 dp[i][ ...

  8. 线性dp

    线性dp应该是dp中比较简单的一类,不过也有难的.(矩乘优化递推请出门右转) 线性dp一般是用前面的状态去推后面的,也有用后面往前面推的,这时候把循环顺序倒一倒就行了.如果有的题又要从前往后推又要从后 ...

  9. 机器分配----线性dp难题(对于我来说)

    题目: 总公司拥有高效设备M台, 准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M <= 15, ...

随机推荐

  1. D3.js比例尺 序数比例尺(v3版本)

    上一章介绍了阈值比例尺:https://www.cnblogs.com/littleSpill/p/10825038.html.到目前所有的定量比例尺已经介绍完了. 现在给大家介绍一下序数比例尺. 定 ...

  2. Git查看历史记录的几种方法

  3. c++11 Thread库写多线程程序

    一个简单的使用线程的Demo c++11提供了一个新的头文件<thread>提供了对线程函数的支持的声明(其他数据保护相关的声明放在其他的头文件中,暂时先从thread头文件入手吧),写一 ...

  4. JS事件 光标聚焦事件(onfocus)当网页中的对象获得聚点时,执行onfocus调用的程序就会被执行

    光标聚焦事件(onfocus) 当网页中的对象获得聚点时,执行onfocus调用的程序就会被执行. 如下代码, 当将光标移到文本框内时,即焦点在文本框内,触发onfocus 事件,并调用函数messa ...

  5. 同步图计算实现pageRank算法

    pageRank算法是Google对网页重要性的打分算法. 一个用户浏览一个网页时,有85%的可能性点击网页中的超链接,有15%的可能性转向任意的网页.pageRank算法就是模拟这种行为. Rv:定 ...

  6. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

  7. postman连接不了localhost问题解决

    学习搭建服务器可用postman 连接不了localhost的端口 网上好多教程是这样连接 看完视频后我们是这样 找了大量资料都解决不了,什么版本,什么证书的都不好使,最简单的就是去掉http:// ...

  8. csps-模拟7980题解

    题面:https://www.cnblogs.com/Juve/articles/11712702.html 树: 我太sb了不知道DROT是1,还在sb找根 记录一个fa[]数组,表示x的祖先中第一 ...

  9. UML之类图、时序图、用例图 粗略版介绍

    UML 概述 UML(Unified Modeling Language):统一(标准)建模语言,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析 ...

  10. SpringBoot:目录

    ylbtech-SpringBoot:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://yl ...