http://acm.hdu.edu.cn/showproblem.php?pid=1423
This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence.
Input
Each sequence is described with M - its length (1 <= M <= 500) and M integer numbers Ai (-2^31 <= Ai < 2^31) - the sequence itself.
Output
output print L - the length of the greatest common increasing subsequence of both sequences.
Sample Input
1 5 1 4 2 5 -12 4 -12 1 2 4
Sample Output
2
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
//t class in 2 group
//m numbers(1<=m<=500)
//each number ai (-2^31<ai<2^31)
//commen lis
//location
int dp[1000],date1[1000],date2[1000];
int main()
{
int t,m1,m2;
int i,j;
int max;
int co;
cin>>t;
while(t--)
{
max=0;
memset(dp,0,sizeof(dp));
cin>>m1;
for(i=0;i<m1;++i)
{
cin>>date1[i];
}
cin>>m2;
for(i=0;i<m2;++i)
{
cin>>date2[i];
}
for(i=0;i<m1;++i)
{
max=0;
for(j=0;j<m2;++j)
{
if(date1[i]==date2[j])
dp[j]=max+1;
if(date1[i]>date2[j]&&dp[j]>max)
max=dp[j];
}
}
co=0;
for(i=0;i<m2;++i)
{
if(co<dp[i])
co=dp[i];
}
cout<<co<<endl;
if(t) cout<<endl;
}
return 0;
}