题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1423
解题思路:
最长公共递增子序列,如果不懂的话,还是看这个人的讲解:http://www.cnblogs.com/xkfz007/archive/2012/10/17/2728728.html
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int i,j,l1,l2;
int a[510],b[510],dp[510];
scanf("%d",&l1);
for(i=1;i<=l1;i++)
scanf("%d",&a[i]);
scanf("%d",&l2);
for(i=1;i<=l2;i++)
scanf("%d",&b[i]);
memset(dp,0,sizeof(dp));
int maxn;
for(i=1;i<=l1;i++)
{
maxn=0;
for(j=1;j<=l2;j++)
{
if(a[i]>b[j]&&maxn<dp[j])
maxn=dp[j];
if(a[i]==b[j])
dp[j]=maxn+1;
}
}
maxn=0;
for(i=1;i<=l1;i++)
if(maxn<dp[i])
maxn=dp[i];
printf("%d\n",maxn);
if(T)
cout<<endl;
}
return 0;
}