#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int t;
int m;
int n;
int maxx;
int temp;
int a[505];
int b[505];
int cnt[505][505];
cin>>t;
while(t--)
{
temp=-1000;
for(int i=0;i<505;i++)
{
a[i] = 0;
b[i] = 0;
}
for(int i=0;i<505;i++)
{
for(int j=0;j<505;j++)
{
cnt[i][j] = 0;
}
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
}
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if((a[i]==b[j])&&(a[i]>=temp))
{
cnt[i][j] = cnt[i-1][j-1]+1;
temp = a[i];
// cout<<cnt[i][j]<<endl;
}
else
{
if(cnt[i-1][j]>cnt[i][j-1])cnt[i][j] = cnt[i-1][j];
else cnt[i][j] = cnt[i][j-1];
}
}
}
cout<<cnt[m][n]<<endl;
if(t)cout<<endl;
}
return 0;
}
DP 最长公共上升子序列(板子)
猜你喜欢
转载自blog.csdn.net/qq_41243063/article/details/81382349
今日推荐
周排行