题意:给出两组数列,求其最长上升公共子序列的个数;
还是不会说...自己看...
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int n,m,a[510],b[510],f[510];
int LCIS()
{
int i,j,k;
memset(f,0,sizeof(f));
for (i=0;i<n;i++)
{
k=0;
for (j=0;j<m;j++)
{
if (a[i]==b[j])
{
if (f[j]<f[k]+1)
f[j]=f[k]+1;
}
else if (a[i]>b[j])
{
if (f[j]>f[k])
k=j;
}
}
}
int ans=0;
for (i=0;i<m;i++)
if (ans<f[i])
ans=f[i];
return ans;
}
int main()
{
int T,i;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for (i=0;i<m;i++)
scanf("%d",&b[i]);
printf("%d\n",LCIS());
if (T) printf("\n");
}
return 0;
}