#P4608. [FJOI2016] 所有公共子序列问题
[FJOI2016] 所有公共子序列问题
题目描述
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列 ,则另一序列 是 的子序列是指存在一个严格递增下标序列 使得对于所有 有 。
例如,序列 GACT
是序列 GCTACT
的子序列,相应的递增下标序列为 。给定两个序列 和 ,当另一序列 既是 的子序列又是 的子序列时,称 是序列 和 的公共子序列。例如,若 GCTACT
, GATCCT
,序列 是 和 的一个公共子序列,序列 GACT
也是 和 的一个公共子序列。注意对于任何给定的序列 和 ,空序列总是它们的一个公共子序列。
所有公共子序列问题是要求对于给定的 个序列 和 ,找出 和 的所有不同的公共子序列。
输入格式
文件的第一行有两个正整数 和 ,分别表示 个输入序列 和 的长度。
接下来的两行分别给出输入序列 和 ,其中序列中每个元素均为二十六个英文大小写字母。
文件的最后一行给出一个非负整数 。
的值为 时,表示计算结果要输出 和 的所有不同的公共子序列,以及 和 有多少个不同的公共子序列。
的值为 时,表示计算结果只要输出 和 有多少个不同的公共子序列。
输出格式
将计算出的 和 的所有不同的公共子序列,或 和 有多少个不同的公共子序列输出到文件中。当 时,先输出 和 的所有不同的公共子序列,每行输出一个公共子序列,按字典序从小到大输出。最后输出不同的公共子序列的个数。当 时,只要输出不同的公共子序列的个数。
6 6
GCTACT
GATCCT 1
A
AC
ACT
AT
C
CC
CCT
CT
G
GA
GAC
GACT
GAT
GC
GCC
GCCT
GCT
GT
GTC
GTCT
GTT
T
TC
TCT
TT
26
提示
答案....很大啦