题目链接:点击打开链接
求最长递增公共子序列长度
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn=1e3+10;
int n,m,a[maxn],b[maxn],dp[maxn][maxn];//a数组的长度n,b数组的长度为m,都是从1开始
int LICS()
{
int MAX,i,j;
memset(dp,0,sizeof(dp));
for(i = 1; i<=n; i++)
{
MAX = 0;
for(j = 1; j<=m; j++)
{
dp[i][j] = dp[i-1][j];
if(a[i]>b[j] && MAX<dp[i-1][j])
MAX = dp[i-1][j];
if(a[i]==b[j])
dp[i][j] = MAX+1;
}
}
MAX = 0;
for(i = 1; i<=m; i++)
if(MAX<dp[n][i])
MAX = dp[n][i];
return MAX;
}
int main()
{
int T,i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
scanf("%d",&m);
for(i=1;i<=m;i++)scanf("%d",&b[i]);
printf("%d\n",LICS());
}
}