#T1259. 最长公共子序列

最长公共子序列

Description

给定两个整数序列,写一个程序求它们的最长上升公共子序列。 当以下条件满足的时候,我们将长度NN的序列S1,S2,...,SNS_1,S_2,...,S_N 称为长度为MM的序列A1,A2,...,AMA_1,A_2,...,A_M的上升子序列: 存在1i1i2...iNM1≤i_1 \le i_2 \le ... \le i_N≤M,使得对所有1jN1≤j≤N,均有Sj=AijS_j = A_{ij},且对于所有的1jN1≤j \le N,均有SjSj+1S_j \le S_{j+1}

Input Format

每个序列用两行表示,第一行是长度M(1M500)M(1≤M≤500),第二行是该序列的M个整数Ai(231Ai<231)A_i(-2^{31}≤A_i<2^{31} )

Output Format

第一行为一个非负整数。表示所求得的最长公共子序列的长度。若不存在公共子序列.则输出文件仅有一行输出一个整数0。

ABCBDAB
BDCABA


4

Hint

最长公共子串(Longest Common Substirng)和最长公共子序列(Longest Common Subsequence,LCS)的区别为:子串是串的一个连续的部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得新的序列;也就是说,子串中字符的位置必须是连续的,子序列则可以不必连续。字符串长度小于等于1000。