bzoj#P2423. [HAOI2010] 最长公共子序列

[HAOI2010] 最长公共子序列

题目描述

字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。

令给定的字符序列 X={x0,x1,,xm1}X=\{x_0,x_1,\cdots ,x_{m-1}\} ,序列 Y={y0,y1,,yk1}Y=\{y_0,y_1,\cdots ,y_{k-1}\} 是 XX 的子序列,存在 XX 的一个严格递增下标序列 {i0,i1,,ik1}\{i_0,i_1,\cdots,i_{k-1}\} ,使得对所有的 j=0,1,,k1j=0,1,\cdots,k-1 ,有 xij=yjx_{i_j}=y_j 。例如,X="ABCBDAB"X=\verb!"ABCBDAB"!Y="BCDB"Y=\verb!"BCDB"!XX 的一个子序列。

对给定的两个字符序列,求出他们最长的公共子序列长度,以及最长公共子序列个数。

输入格式

11 行为第 11 个字符序列,都是大写字母组成,以 . 结束,长度小于 50005000

22 行为第 22 个字符序列,都是大写字母组成,以 . 结束,长度小于 50005000

输出格式

11 行输出上述两个最长公共子序列的长度。

22 行输出所有可能出现的最长公共子序列个数,答案可能很大,只要将答案对 100,000,000100,000,000 求余即可。

ABCBDAB.
BACBBD.
4
7

数据规模与约定

对于 100%100\% 的数据,保证两字符串长度均小于 50005000

题目来源

HAOI2010 Day1\text{HAOI2010 Day1}