【FJOI2016】所有公共子序列问题
问题描述
输入格式
输出格式
样例输入
6 6
GCTACT
GATCCT
1
样例输出
A
AC
ACT
ATC
CC
CCT
CTG
GA
GAC
GACT
GAT
GC
GCC
GCCT
GCT
GT
GTC
GTCT
GTTT
TC
TCT
TT
26
提示
1≤m,n≤3010
处理子序列问题,需要用到序列自动机。简单的来说,就是记录$son[i][j]$表示从第$i$个位置往后,第一个$j$出现的位置,容易发现,从根出发的一条路径代表了原串的一个子序列。
对于第一问,构建了自动机后直接同时在两个自动机上跑,边跑边输出就行了。
对于第二问,在序列自动机上DP,子序列个数就是从根出发的路径数,在DAG上DP一下就行了。
考虑一下就能发现,此题答案可能非常大,需要高精度。
代码:
1 |
|