Type: Default 1000ms 256MiB

最长上升公共子序列

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

【题目描述】

给定两个整数序列,写一个程序求它们的最长上升公共子序列。

当以下条件满足的时候,我们将长度 NN 的序列 S1,S2,...,SNS_1,S_2,...,S_N 称为长度为 MM 的序列 A1,A2,...,AMA_1,A_2,...,A_M 的上升子序列:

存在1i1<i2<<iNM1\le i_1<i_2<\dots<i_N\le M,是的对所有 1jN1\le j\le N,均有 Sj=AijS_j=A_{ij},且对于所有的 1j<N1\le j<N,均有Sj<Sj+1S_j<S_{j+1}

【输入】

每个序列用两行表示,第一行是长度 M(1M500)M(1≤M≤500),第二行是该序列的 M 个整数Ai(231Ai<231)A_i(-2^{31}≤A_i<2^{31} )

【输出】

在第一行,输出两个序列的最长上升公共子序列的长度 LL。在第二行,输出该子序列。如果有不止一个符合条件的子序列,则输出任何一个即可。

【输入样例】

5
1 4 2 5 -12
4
-12 1 2 4

【输出样例】

2
1 4

【提示】

经典算法Baidu搜索,深刻体会。

【来源】

一本通在线评测

B班基础dp巩固训练:序列问题

Not Claimed
Status
Done
Problem
14
Open Since
2024-8-9 14:45
Deadline
2024-8-26 23:59
Extension
24 hour(s)