#tctm1828. 公共子序列

    ID: 3199 传统题 1000ms 512MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>动态规划基础线性DP第二十讲(Level3)GESP 6级

公共子序列

公共子序列

题目描述

我们称序列 Z=z1,z2,,zkZ = \langle z_1, z_2, \ldots, z_k \rangle 是序列 X=x1,x2,,xmX = \langle x_1, x_2, \ldots, x_m \rangle 的子序列,当且仅当存在严格上升的序列 i1,i2,,ik\langle i_1, i_2, \ldots, i_k \rangle,使得对 j=1,2,,kj = 1, 2, \ldots, k,有 xij=zjx_{i_j} = z_j。比如 Z=a,b,f,cZ = \langle a, b, f, c \rangleX=a,b,c,f,b,cX = \langle a, b, c, f, b, c \rangle 的子序列。

现在给出两个序列 XXYY,你的任务是找到 XXYY 的最大公共子序列,也就是说要找到一个最长的序列 ZZ,使得 ZZ 既是 XX 的子序列也是 YY 的子序列。

输入格式

输入包括多组测试数据。每组数据包括一行,给出两个长度不超过 200200 的字符串,表示两个序列。两个字符串之间由若干个空格隔开。

输出格式

对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度。

样例输入 #1

abcfbc abfcab
programming contest
abcd mnp

样例输出 #1

4
2
0

数据范围

字符串长度不超过 200200。多组测试数据。

知识点与难度

本题涉及的知识点从属于 GESP 6级(动态规划基础, 线性DP),难度等级:⭐⭐⭐


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~2 样例
1 20 3~8 小规模 / 特殊性质
2 15 9~11 Hack
3 30 12~20 中大规模
4 25 21~25 随机回归