最长公共子序列
int n;cin>>n;
int ans=0;
vector<int> a(n+1),b(n+1);
vector<vector<int>> dp(n+1,vector<int>(n+1));
for(int i=1;i<=n;i++) cin>>a[i];
for(int j=1;j<=n;j++) cin>>b[j];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
if(a[i]==b[j]){
dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
}
}
}
ans=dp[n][n];
cout<<ans<<endl;