动态规划-最长不降子序列
//
// main.cpp
// PATA1045
//
// Created by Phoenix on 2018/2/12.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 10010;
int a[maxn], dp[maxn];
int main(int argc, const char * argv[]) {
int n, m, k;
scanf("%d %d", &n, &m);
int fav[210] = {0};
for(int i = 1; i <= m; i++) {
int b;
scanf("%d", &b);
fav[b] = i;
}
scanf("%d", &k);
int num = 0;
for(int i = 0; i < k; i++) {
int b;
scanf("%d", &b);
if(fav[b] > 0){
a[num++] = fav[b];
}
}
int ans = 0;
for(int i = 0; i < num; i++) {
dp[i] = 1;
for(int j = 0; j < i; j++) {
if(a[i] >= a[j] && (dp[j] + 1 > dp[i])) {
dp[i] = dp[j] + 1;
}
}
ans = max(ans, dp[i]);
//printf("%d %d\n", a[i], dp[i]);
}
printf("%d", ans);
return 0;
}