状态表示挺少见的:f[i][j] 表示 a[1 - i] 与 b[1 - j] 的公共子序列的最大长度。

状态转移:化整为零,四种情况。

(1)a[i] 与 b[j] 都不选 就是 f[i - 1][j - 1]

(2)a[i] 与 b[j] 选其中一个 就是f[i - 1][j] 和 f[i][j - 1]

(3)a[i] 与 b[j] 都选 f[i - 1][j - 1] + 1

状态转移方程:四种情况取最大即可

枚举顺序:随便

答案:f[n][m]

897. 最长公共子序列

  • 题目
  • 提交记录
  • 讨论
  • 题解
  • 视频讲解

给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。

输入格式

第一行包含两个整数N和M。

第二行包含一个长度为N的字符串,表示字符串A。

第三行包含一个长度为M的字符串,表示字符串B。

字符串均由小写字母构成。

输出格式

输出一个整数,表示最大长度。

数据范围

1≤N,M≤10001≤N,M≤1000

输入样例:

4 5
acbd
abedc

输出样例:

3
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
typedef long long ll;
const int N = 1e3 + 15;
int n,m,f[N][N];
string a,b;
int main()
{cin >> n >> m >> a >> b;a = "0" + a;b = "0" + b;for(int i = 1; i <= n; i ++)for(int j = 1; j <= m; j ++){f[i][j] = max(f[i - 1][j],f[i][j - 1]);if(a[i] == b[j]) f[i][j] = max(f[i][j],f[i - 1][j - 1] + 1); }cout << f[n][m] << endl;return 0;
}

Acwing - 最长公共子序列相关推荐

  1. AcWing 897. 最长公共子序列(LCS朴素版)

    题目连接 https://www.acwing.com/problem/content/899/ 思路 我们定义f[i][j]f[i][j]f[i][j]表示的是a串中长度为i和b串长度为j的最长公共 ...

  2. 最长公共子序列LCS[C++题解]

    文章目录 状态表示 状态转移 题目大意: 两个字符串a和b,需要统计出其中公共子序列的最长是多少. 注意:所谓子序列,指的是出现的先后顺序一样,但可以不连续出现.比如对于s=abdef,其中adf是s ...

  3. 最长公共子序列(详细代码 注释 分析 以及求出最长公共子序列内容方法)

    最长公共子序列 文章有些长,希望能够耐心看完,并且对你有帮助,文章是自己看了书之后,总结的,如果有什么错误的地方,欢迎指出. 一些基本的概念: 子序列: 原序列中删除若干个元素得到的序列,即原序列中可 ...

  4. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  5. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  6. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  7. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

  8. 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence

    动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...

  9. 触类旁通,经典面试题最长公共子序列应该这么答

    作者 |  labuladong 来源 | labuladong(ID:labuladong) [导读]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经 ...

  10. 模板 - 最长上升子序列与最长公共子序列

    整理的算法模板合集: ACM模板 目录 1.最长上升子序列(LIS) 1.1树状数组优化O(nlogn)O(nlogn)O(nlogn) 2.最长公共子序列(LCS) 2.1转换成LIS优化O(nlo ...

最新文章

  1. linux快捷键 赋值,2_Shell语言———bash的快捷键、变量声明、引用变量及变量替换...
  2. 关于“#ifdef __cplusplus” 和 extern C 的问题
  3. javascript设计模式--命令模式
  4. 前端学习(2844):ui另一种按需加载
  5. java xy,java – 某个z深度的xy位置
  6. QML笔记-QML基本数据类型的使用
  7. Java 使用阿里云短信的API接口
  8. Python3.0的新改动
  9. js Indexof的用法
  10. 移动Web开发之流式布局笔记
  11. 最新html word 分页符,分页符 有什么用
  12. 面对SSD的步步紧逼,HDD依然奋斗不息
  13. 【Unity3D日常开发】新建2D、3D场景,新建场景没有灯光等问题
  14. 009.查找手机电话簿【散列表】
  15. java获取网页编码_java根据URL获取网页编码
  16. Spring项目使用H2内存数据库做单元测试
  17. LED及LCD冲突问题解决及LCD的驱动改进(蓝桥杯嵌入式stm32G431RBT6)
  18. 如何提高外贸询单转化率
  19. kernel panic-not syncing:IO-APIC+timer doesn't work!
  20. 央视春晚歌手王琪,和戏歌双绝吴广全在长春芝华仕会盟

热门文章

  1. ubuntu 无法识别Usb
  2. 什么是MySQL视图
  3. C/C++变量在内存中的位置及初始化问题
  4. 拓端tecdat|R语言使用二元回归将序数数据建模为多元GLM
  5. 用文本方式将数据装入一个数据库表 mysql_文本应该放哪_MySQL用文本方式将数据装入数据库表中...
  6. win10安装nvidia驱动
  7. 【NumPy基础】100道numpy练习——进阶篇
  8. python实现完整的求解给定列表中所有的平衡点问题,是所有的平衡点
  9. python 包的使用 (二)——tesseract识别图片中的文字
  10. python数组拼接concat_【JavaScript】重写数组的concat()方法