题目描述
This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence.
输入
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 print L - the length of the greatest common increasing subsequence of both sequences.
样例输入
1 5 1 4 2 5 -12 4 -12 1 2 4
样例输出
2
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
int a[510],b[510],dp[510];
int main()
{
int t;
cin>>t;
while(t--)
{
int i,j,m,n;
memset(dp,0,sizeof(dp));
cin>>n;
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
cin>>m;
for(int i=1; i<=m; i++)
cin>>b[i];
int MAX;
for(int i=1;i<=n;i++)
{
MAX=0;
for(int j=1;j<=m;j++)
{
if(a[i]==b[j])
dp[j]=MAX+1;
if(a[i]>b[j]&&dp[j]>MAX)
MAX=dp[j];
}
}
MAX=0;
for(int i=1;i<=m;i++)
if(dp[i]>MAX)
MAX=dp[i];
cout<<MAX<<endl;
if(t) cout<<endl;
}
return 0;
}