该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
对于序列 A=a1,a2,…,an,如果对于任意的 i∈[1,n),都有 ai<ai+1,则称之为上升的。
对于序列 A=a1,a2,…,an 和 S=s1,s2,…,sk,如果存在一组下标 1≤i1<i2<⋯<ik≤n 使得 aij=sj,则称序列 S 为 A 的子序列。换句话讲,可以通过删除序列 A 中的一些项得到 S。
现在给定两个整数序列,编写程序找到它们的最长公共上升子序列。即最大长度的、两个序列公共的、上升子序列。
输入格式
第一行一个整数 n,表示第一个序列的长度。
第二行 n 个整数 ai,表示第一个序列中的元素,整数之间用空格分隔。
第三行一个整数 m,表示第二个序列的长度。
第四行 m 个整数 bi,表示第一个序列中的元素,整数之间用空格分隔。
输出格式
第一行一个整数 k,表示最长公共上升子序列的长度。
第二行 k 个整数,表示最长公共上升子序列,如果有多个序列,输出下标字典序最小的一个。
提示
样例 3 见附加文件。
对于 40% 的数据,n,m≤20。
对于 100% 的数据,n,m≤500,0≤ai,bi≤109。