题目描述
给出 1 , 2 , … , n 1,2,\ldots,n 1,2,…,n 的两个排列 P 1 P_1 P1和 P 2 P_2 P2 ,求它们的最长公共子序列。
输入格式
第一行是一个数 n n n。
接下来两行,每行为 n n n 个数,为自然数 1 , 2 , … , n 1,2,\ldots,n 1,2,…,n的一个排列。
输出格式
一个数,即最长公共子序列的长度。
输入输出样例
输入
5
3 2 1 4 5
1 2 3 4 5
输出
3
3 | 2 | 1 | 4 | 5 | |
---|---|---|---|---|---|
1 | 0 | 0 | 1 | 1 | 1 |
2 | 0 | 1 | 1 | 1 | 1 |
3 | 1 | 1 | 1 | 1 | 1 |
4 | 1 | 1 | 1 | 2 | 2 |
5 | 1 | 1 | 1 | 2 | 3 |
f
[
i
]
[
j
]
f[i][j]
f[i][j]代表最大值
如
f
[
4
]
[
4
]
=
2
f[4][4] = 2
f[4][4]=2,
f
[
2
]
[
3
]
=
1
f[2][3] = 1
f[2][3]=1
f
[
1
]
[
1
]
=
(
a
[
1
]
[
1
]
=
=
a
[
2
]
[
1
]
)
f[1][1] = (a[1][1]==a[2][1])
f[1][1]=(a[1][1]==a[2][1])
f ( x ) = { m a x ( f [ i − 1 , j ] , f [ i , j − 1 ] ) i != j m a x ( f [ 1 ] [ 1 ] , f [ 2 ] [ 2 ] , … , f [ i − 1 , j − 1 ] + 1 ) i = j f(x)= \begin{cases} max( f[i-1,j],f[i,j-1] )& \text{i != j}\\ max(f[1][1],f[2][2], …,f[i-1,j-1]+1)& \text{i = j} \end{cases} f(x)={max(f[i−1,j],f[i,j−1])max(f[1][1],f[2][2],…,f[i−1,j−1]+1)i != ji = j