例题27 王子和公主(Prince and Princess, UVa 10635)
有两个长度分别为p+1和q+1的序列, 每个序列中的各个元素互不
相同, 且都是1~n2之间的整数。 两个序列的第一个元素均为1。 求出A和
B的最长公共子序列长度。
【输入格式】
输入的第一行为数据组数T(T≤10) 。 每组数据包含3行, 第一行为3
116个整数n, p, q(2≤n≤250, 1≤p, q≤n2) ; 第二行包含序列A, 其中第一
个数为1, 其元素两两不同, 且都是1~n2之间的整数; 第三行包含序列
B, 格式同序列A。
【输出格式】
对于每组数据, 输出A和B的最长公共子序列的长度。
【分析】
本题是LCS问题, 但因为p和q可以高达2502=62500, O(pq) 的算法
显然太慢。 注意到A序列中所有元素均不相同, 因此可以把A中元素重新
编号为1~p+1。 例如, 样例中A={1, 7, 5, 4,
有两个长度分别为p+1和q+1的序列, 每个序列中的各个元素互不
相同, 且都是1~n2之间的整数。 两个序列的第一个元素均为1。 求出A和
B的最长公共子序列长度。
【输入格式】
输入的第一行为数据组数T(T≤10) 。 每组数据包含3行, 第一行为3
116个整数n, p, q(2≤n≤250, 1≤p, q≤n2) ; 第二行包含序列A, 其中第一
个数为1, 其元素两两不同, 且都是1~n2之间的整数; 第三行包含序列
B, 格式同序列A。
【输出格式】
对于每组数据, 输出A和B的最长公共子序列的长度。
【分析】
本题是LCS问题, 但因为p和q可以高达2502=62500, O(pq) 的算法
显然太慢。 注意到A序列中所有元素均不相同, 因此可以把A中元素重新
编号为1~p+1。 例如, 样例中A={1, 7, 5, 4,