#B2175. 最长公共子序列

最长公共子序列

题目描述

给定一个长度为 nn 的整数序列 AA 和一个长度为 mm 的整数序列 BB,请你求出它们的最长公共子序列的长度。

一个序列的子序列,是指从原序列中删除若干个元素(也可以不删除),并保持剩余元素的相对顺序不变后得到的序列。子序列中的元素在原序列中不必连续。例如,序列 1,3,51,3,5 是 1,2,3,4,51,2,3,4,5 的子序列,而 3,1,53,1,5 不是。

如果一个序列既是 AA 的子序列,也是 BB 的子序列,那么它就是 AA 和 BB 的公共子序列。所有公共子序列中,长度最大的称为最长公共子序列(LCS)。

你只需要输出最长公共子序列的长度,不需要输出具体的子序列。如果两个序列没有相同的元素,则答案为 00。

输入格式

第一行包含两个整数 n,mn,m,分别表示序列 AA 和序列 BB 的长度。

第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n,依次表示序列 AA 中的元素。

第三行包含 mm 个整数 b1,b2,…,bmb_1,b_2,\ldots,b_m,依次表示序列 BB 中的元素。

同一行内的相邻整数之间用一个空格分隔。

输出格式

输出一行一个整数,表示序列 AA 和序列 BB 的最长公共子序列的长度。

7 6
1 3 4 1 2 8 5
3 4 1 2 1 5
5
3 4
1 2 3
4 5 6 7
0

提示

样例 1 解释

序列 3,4,1,2,53,4,1,2,5 是两个序列的一个公共子序列:

  • 在序列 AA 中,可以依次选择第 2,3,4,5,72,3,4,5,7 个元素。
  • 在序列 BB 中,可以依次选择第 1,2,3,4,61,2,3,4,6 个元素。 这个公共子序列的长度为 55。可以证明这是它们的最长公共子序列。

样例 2 解释

两个序列没有相同的元素,因此最长公共子序列的长度为 00。

数据范围

对于 10%10\% 的数据,1≤n,m≤101\leq n,m\leq 10;

对于 30%30\% 的数据,1≤n,m≤1001\leq n,m\leq 100;

对于 60%60\% 的数据,1≤n,m≤10001\leq n,m\leq 1000;

对于所有测试数据,1≤n,m≤50001\le n,m\le 5000,1≤ai,bj≤1091\le a_i,b_j\le 10^9,同一个序列中可以出现重复的元素。