代码:
N = int(input())
lst_1 = [0] + list(map(int,input().split()))
lst_2 = [0] + list(map(int,input().split()))
#* dp[i][j] 第一个序列的前i个元素 与 第二个序列前j个字母 以b[j]结尾 的最长公共上升子序列长度
dp = [[0 for i in range(N+1)]for j in range(N+1)]
for i in range(1,N+1) : # 枚举第一个序列
mx = 1
for j in range(1,N+1) : # 枚举第二个序列
dp[i][j] = dp[i-1][j] # 如果第一个序列的第i个数字 不等于 第二个序列的第j个数字
if lst_1[i] == lst_2[j] : dp[i][j] = max(dp[i][j],mx) # 如果等于
if lst_1[i] > lst_2[j] : mx = max(mx,dp[i-1][j]+1) # mx来储存当前a[i]>b[k]时 dp[i-1][k]+1的最大值
print(max(dp[N]))