1 #include<cstdio>
2 #include<iostream>
3 #include<cstdlib>
4 #include<cmath>
5 #include<vector>
6 #include<algorithm>
7 #include<cstring>
8 #include<vector>
9 #include<map>
10 #include<stack>
11 #define maxn 3000+50
12 #define inf 0x7fffffff
13 #define xiao 1e-9
14 using namespace std;
15 int dp[maxn][maxn],a[maxn],b[maxn],n;
16 int main()
17 {
18 cin>>n;
19 for(int i=1;i<=n;++i) scanf("%d",&a[i]);
20 for(int i=1;i<=n;++i) scanf("%d",&b[i]);
21 memset(dp,0,sizeof(dp));
22 int max1=0;
23 for(int i=1;i<=n;++i)
24 {
25 max1=0;
26 for(int j=1;j<=n;++j)
27 {
28 dp[i][j]=dp[i-1][j];
29 if(a[i]>b[j]&&max1<dp[i-1][j]) max1=dp[i-1][j];
30 if(a[i]==b[j]) dp[i][j]=max1+1;
31 }
32 }
33 max1=0;
34 for(int i=1;i<=n;++i) if(max1<dp[n][i]) max1=dp[n][i];
35 cout<<max1;
36 return 0;
37 }
38 //给出的是两个序列长度相等时的LCIS,长度不相等时也是一样的,加一个n1就好。
39