Greatest Common Increasing Subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5384 Accepted Submission(s): 1742
Problem Description
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 <stdio.h>
#include <string.h>
const int MAXN=510;
int a[MAXN],b[MAXN];
int f[MAXN];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++)
scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
{
int MAX=0;
for(int k=1;k<=m;k++)
{
if(a[i]>b[k]&&MAX<f[k])
MAX=f[k];
if(a[i]==b[k])
f[k]=MAX+1;
}
}
int temp=0;
for(int i=1;i<=m;i++)
{
if(temp<f[i])
temp=f[i];
}
printf("%d\n",temp);
if(t)printf("\n");
}
return 0;
}