d[i][j]:=第一行的前i个与第二行的前j个匹配的最大值
d[i][j]:=max(d[i-1][j],d[i][j-1],d[s1-1][s2-1]+2)
1<=s1<i,1<=s2<j
a[s1]==b[j],a[i]==b[s2],a[i]!=b[j]
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m;
scanf("%d",&m);
while(m--){
int n1,n2;
scanf("%d%d",&n1,&n2);
int a[105],b[105];
for (int i=1;i<=n1;i++) scanf("%d",&a[i]);
for (int i=1;i<=n2;i++) scanf("%d",&b[i]);
int d[105][105];
memset(d,0,sizeof(d));
for (int i=2;i<=n1;i++){
for (int j=2;j<=n2;j++){
for (int s1=1;s1<i;s1++){
for (int s2=1;s2<j;s2++){
if (a[s1]==b[j]&&a[i]==b[s2]&&a[i]!=b[j]){
d[i][j]=max(d[i][j],d[s1-1][s2-1]+2);
}
}
}
d[i][j]=max(d[i][j],max(d[i][j-1],d[i-1][j]));
}
}
printf("%d\n",d[n1][n2]);
}
return 0;
}