/*
2月28 从这题中可以很明显的看出我的粗心 ,第一个表示的是 第一个事件在第几个顺序发生 而我确认为 他说的是 第一个表示的是第几个事件发生 这题理解了这里就不难了 LIS 。。。 */ #include<iostream> #include <cstdio> #include <string.h> using namespace std; int N[2][25]; int A[2][25]; int main() { int n ,d; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&d); A[0][d-1]=i; } while(scanf("%d",&d)==1){ A[1][d-1]=1; for(int i=2;i<=n;i++) { scanf("%d",&d); A[1][d-1]=i; } memset(N,0,sizeof(N)); d=0; for(int i=1;i<=n;i++){ d=d^1; for(int j=1;j<=n;j++){ if(A[0][i-1]==A[1][j-1]) N[d][j]=N[d^1][j-1]+1; if(A[0][i-1]!=A[1][j-1]) N[d][j]=N[d][j-1]>N[d^1][j]?N[d][j-1]:N[d^1][j]; } } printf("%d ",N[d][n]); } return 0; }