思路:
DP[ i ] 代表以值 i 结尾的当前最长长度。
每次枚举序列数组,dp[ i ] = max( dp[ i ] ,dp[ a[j] ] + 1);
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e2+10;
int n,m;
int a[N],id[N];
int dp[N],x;
int main()
{
int t;
scanf("%d",&t);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
id[a[i]]=i;
}
scanf("%d",&m);
memset(dp,0,sizeof(dp));
for(int i=1;i<=m;i++)
{
scanf("%d",&x);
int pos=id[x];
for(int j=pos;j>=1;j--)
dp[x]=max(dp[x],dp[a[j]]+1);
}
int ans=1;
for(int i=1;i<=n;i++)
ans=max(dp[a[i]],ans);
printf("%d\n",ans);
return 0;
}