标签:DP

题目

n<=1e5,m<=26

分析

O(n)判断两个长度为n的串的LCS长度为n-1

令f[i][j] (j∈[-1,0,1])表示第一个串到第i个数,第二个串到第i-j个数的LCS

对于f[i][-1],f[i][0],f[i][1],它们之间的差一定不会超过1,且不会变小,因此可以用二进制来表示状态

然后DP套DP解决

code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
#define mem(x,num) memset(x,num,sizeof x)
#define reg(x) for(int i=last[x];i;i=e[i].next)
using namespace std;
inline ll read()
{ll f=1,x=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
const int maxn=1e5+6;
ll f[maxn][2][2][2],ans;
int n,m;char st[maxn];
int main()
{n=read(),m=read();scanf("%s",st);if(n==1){cout<<m-1<<endl;return 0;}f[1][1][1][1]=1;if(st[0]==st[1])f[1][1][0][0]=m-1;else f[1][1][0][1]=1,f[1][1][0][0]=m-2;rep(i,1,n-1)rep(k,0,1)rep(l,0,1)rep(t,0,1)if(f[i][k][l][t])rep(j,1,m){int X=l+i-1,Y=t+i-1;if(j==st[i-1]-'a'+1)X=max(X,k+i-2+1);if(j==st[i-1]-'a'+1)Y=max(Y,k+i-2+1);if(j==st[i]-'a'+1)Y=max(Y,l+i-1+1);int Z=Y;if(j==st[i+1]-'a'+1)Z=max(Z,max(l-i-1+1,t+i-1+1));X-=(i-1);Y-=i;Z-=i;if(X>=0&&Y>=0&&Z>=0)f[i+1][X][Y][Z]+=f[i][k][l][t];}rep(k,0,1)rep(l,0,1)ans+=f[n][k][0][l];cout<<ans<<endl;return 0;
}

最长公共子序列【省选模拟赛】相关推荐

  1. 洛谷[LnOI2019]长脖子鹿省选模拟赛 简要题解

    传送门 听说比赛的时候T4T4T4标程锅了??? WTF换我时间我要写T3啊 于是在T4T4T4调半天无果的情况下260pts260pts260pts收场真的是tcltcltcl. T1 快速多项式变 ...

  2. 长脖子鹿省选模拟赛 [LnOI2019SP]快速多项式变换(FPT)

    本片题解设计两种解法 果然是签到题... 因为返回值问题T了好久... 第一眼:搜索大水题? 然后...竟然A了 1 #include<cstdio> 2 #include<queu ...

  3. [LnOI2019]长脖子鹿省选模拟赛 东京夏日相会

    这里来一发需要开毒瘤优化,并且几率很小一遍过的模拟退火题解... 友情提醒:如果你很久很久没有过某一个点,您可以加上特判 可以像 P1337 [JSOI2004]平衡点 / 吊打XXX 那道题目一样 ...

  4. [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结

    t1-快速多项式变换(FPT) 题解 看到这个\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+ \cdots + a_nx^n\)式子,我们会想到我们学习进制转换中学到的,那么我们就只需要 ...

  5. 哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)---E---小乐乐匹配字符串(最长公共子序列)

    链接:https://ac.nowcoder.com/acm/contest/301/E 来源:牛客网 小乐乐有字符串str1,str2. 小乐乐想要给他们找朋友. 小乐乐想知道在这两个字符串中最多能 ...

  6. 省选模拟赛记录(越往下越新哦~~~)

    LOG 模拟赛 第一次见尼玛这么给数据范围的-- 开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会-- 思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大 ...

  7. 助你深刻理解——最长公共子串、最长公共子序列(应该是全网数一数二的比较全面的总结了)

    往事不堪回首,那些年处理过的字符串[的一些骚操作] 最长公共子串篇(20191120) 理论知识: 图形理解: 矩阵初始化: 矩阵数值演变: 类似算法: 代码实现(C++): 代码设计满足的要求: 测 ...

  8. 最长公共子序列动态规划c语言,动态规划----最长公共子序列(C++实现)

    最长公共子序列 题目描述:给定两个字符串s1 s2 - sn和t1 t2 - tm .求出这两个字符串的最长公共子序列的长度.字符串s1 s2 - sn的子序列指可以表示为 - { i1 < i ...

  9. 漫画:最长公共子序列

    题目: 给定两个字符串 str1 和 str2,返回这两个字符串的最长公共子序列的长度 解释:一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以 ...

  10. 最长公共子序列LCS

    输入: str1 = "abcde", str2 = "ace" 输出: 3 解释: 最长公共子序列是 "ace",它的长度是 3 这里用0 ...

最新文章

  1. 实现线程哪种方法更好_实施数据以实现更好的用户体验设计的4种方法
  2. 关于Windows 7的64位系统不兼容某些控件的问题
  3. shell-1.shell注释
  4. Java网络编程-1
  5. 编译ffmpeg出现 librtmp not found using pkg-config
  6. 设置域用户帐户的登录时间
  7. zabbix 邮件报警 监控mysql主从
  8. QT实现操控打印机打印图片
  9. ubuntu系统各pdf编辑器的使用体验和比较
  10. 如何在 think-cell 瀑布图中并行汇总多个系列?
  11. 项目管理软件之禅道和JIRA的共同点与区别
  12. Html post易语言服务器,POST其实很简单 15 易语言模块之精易模块
  13. php utc 北京时间,美国各个时区转换成北京时间 utc gmt
  14. 影响力(罗伯特·西奥迪尼)读书笔记思维导图
  15. 最小圆覆盖问题 算法步骤与证明+代码模板
  16. UESTC论坛-清水河畔自动登陆/重复发贴/安全性分析
  17. 电脑电池出场容量与目前最大容量查询查询
  18. GetPrivateProfileString函数之新手上路
  19. 1271:圆柱体的表面积
  20. 关于Pi的kyc相关问题

热门文章

  1. 小鹏VPA停车场记忆泊车功能试驾体验和解读
  2. 【论文解读】CVPR 2021 妆容迁移 论文解读Spatially-invariant Style-codes Controlled Makeup Transfer
  3. 基于Extent 的文件存储(fiemap)
  4. 【ts】typescript高阶:键值类型及type与interface区别
  5. 华为防火墙基础自学系列 | Site to Site IPSec VdPdNd
  6. 数据库应用-后缀树及后缀数组(Suffix-BäumeSuffix-Arraz)-2
  7. 定时改变App主题的方案
  8. 谷歌浏览器下载地址及chromedriver下载地址
  9. mysql查询某一个字段是否包含中文汉字
  10. C#语言实例源码系列-实现批量更改文件名称大小写或扩展名