思路:
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 ",ans); return 0; }