B2175 最长公共子序列
题目描述
给定一个长度为 $n$ 的整数序列 $A$ 和一个长度为 $m$ 的整数序列 $B$,请你求出它们的最长公共子序列的长度。
一个序列的子序列,是指从原序列中删除若干个元素(也可以不删除),并保持剩余元素的相对顺序不变后得到的序列。子序列中的元素在原序列中不必连续。例如,序列 $1,3,5$ 是 $1,2,3,4,5$ 的子序列,而 $3,1,5$ 不是。
如果一个序列既是 $A$ 的子序列,也是 $B$ 的子序列,那么它就是 $A$ 和 $B$ 的公共子序列。所有公共子序列中,长度最大的称为最长公共子序列(LCS)。
你只需要输出最长公共子序列的长度,不需要输出具体的子序列。如果两个序列没有相同的元素,则答案为 $0$。
输入格式
第一行包含两个整数 $n,m$,分别表示序列 $A$ 和序列 $B$ 的长度。
第二行包含 $n$ 个整数 $a_1,a_2,\ldots,a_n$,依次表示序列 $A$ 中的元素。
第三行包含 $m$ 个整数 $b_1,b_2,\ldots,b_m$,依次表示序列 $B$ 中的元素。
同一行内的相邻整数之间用一个空格分隔。
输出格式
输出一行一个整数,表示序列 $A$ 和序列 $B$ 的最长公共子序列的长度。
说明/提示
### 样例 1 解释
序列 $3,4,1,2,5$ 是两个序列的一个公共子序列:
- 在序列 $A$ 中,可以依次选择第 $2,3,4,5,7$ 个元素。
- 在序列 $B$ 中,可以依次选择第 $1,2,3,4,6$ 个元素。
这个公共子序列的长度为 $5$。可以证明这是它们的最长公共子序列。
### 样例 2 解释
两个序列没有相同的元素,因此最长公共子序列的长度为 $0$。
### 数据范围
对于 $10\%$ 的数据,$1\leq n,m\leq 10$;
对于 $30\%$ 的数据,$1\leq n,m\leq 100$;
对于 $60\%$ 的数据,$1\leq n,m\leq 1000$;
对于所有测试数据,$1\le n,m\le 5000$,$1\le a_i,b_j\le 10^9$,同一个序列中可以出现重复的元素。