4990:基因序列

文件提交:无需freopen 内存限制:512 MB 时间限制:1.000 S
评测方式:普通裁判
金币值:
命题人:
提交:1 解决:0

题目描述

# 基因序列 ## 题目描述 在生物信息学研究中,研究员常需要比较两段基因序列的相似度。现有两段由核苷酸编号组成的序列 $A$ 和 $B$ ,长度分别为 $N$ 和 $M$ 。序列中的每个元素都是一个 $[1, 10^5]$ 之间的整数。 在比对过程中,研究员会从序列 $A$ 中选出一个子序列 $A'$ ,再从序列 $B$ 中选出一个子序列 $B'$ 。 如果子序列 $A'$ 与子序列 $B'$ 完全相同(即长度相同且对应位置的元素相等),则称其为一对“匹配子序列对”。 需要注意的是: - **下标敏感**:即使两个子序列所含的元素数值序列相同,只要选取的元素在原序列中的下标集合不同,就视为不同的子序列。 - **空序列**:根据研究定义,从 $A$ 和 $B$ 中均不选取任何元素所构成的空序列对,也算作一对匹配子序列对。 - **子序列**:从原序列中选择若干元素(可以不选),在不改变它们相对前后顺序的前提下,提取出来所组成的新序列。 请你编写程序,计算两段序列中共有多少对不同的“匹配子序列对”。由于答案可能很大,请输出对 $10^9 + 7$ 取模后的结果。 ## 输入格式 第一行包含两个整数 $N$ 和 $M$ ,分别表示序列 $A$ 和 $B$ 的长度。 第二行包含 $N$ 个整数,表示序列 $A$ 的各个元素。 第三行包含 $M$ 个整数,表示序列 $B$ 的各个元素。 ## 输出格式 输出一个整数,表示匹配子序列对的总数对 $10^9 + 7$ 取模后的结果。 ## 样例 ### 样例输入 1 ```text 2 2 1 3 3 1 ``` ### 样例输出 1 ```text 3 ``` ### 样例输入 2 ```text 2 2 1 1 1 1 ``` ### 样例输出 2 ```text 6 ``` ### 样例输入 3 ```text 4 4 3 4 5 6 3 4 5 6 ``` ### 样例输出 3 ```text 16 ``` ## 说明/提示 输入样例 4 10 9 9 6 5 7 5 9 8 5 6 7 8 6 8 5 5 7 9 9 7 输出样例 4 191 **样例 1 说明:** - $A$ 的子序列有: $\emptyset, (1), (3), (1,3)$ ; - $B$ 的子序列有: $\emptyset, (3), (1), (3,1)$ 。 匹配的子序列对为: $(\emptyset, \emptyset)$ 、 $((1), (1))$ 、 $((3), (3))$ ,共 3 对。 **样例 2 说明:** $A$ 有两个位置可以选出 $(1)$ ,记为 $A_1, A_2$ ; $B$ 同理记为 $B_1, B_2$ 。 匹配对如下: - 空序列匹配: $(\emptyset, \emptyset)$ ,共 $1$ 对; - 长度为 1 的匹配: $(A_1, B_1), (A_1, B_2), (A_2, B_1), (A_2, B_2)$ ,共 $4$ 对; - 长度为 2 的匹配: $((A_1, A_2), (B_1, B_2))$ ,共 $1$ 对。 总计 $1 + 4 + 1 = 6$ 对。 数据范围 | 测试点编号 | $N,M$ | |---|---| | $1 \sim 5$ | $1 \le N,M \le 50$ | | $6 \sim 25$ | $1 \le N \le 2000$ | 对于 $100\%$ 的数据,满足 $1 \leq N, M \leq 2000$ , $1 \leq A_i, B_i \leq 10^5$ 。 --- **题目来源:** 26年3月-B组(才俊)