Greatest Common Increasing Subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2304 Accepted Submission(s): 699
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
动态规划求最长递增公共子序列
<span style="font-size:18px;color:#000000;"><strong></strong></span><pre class="html" name="code">#include<iostream>
using namespace std;
#define MAX 510
int a[MAX];
int b[MAX];
int dp[MAX];
int main()
{
int t,n,m,i,j,k,max;
cin>>t;
while(t--)
{
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
cin>>m;
for(i=0;i<m;i++)
{
cin>>b[i];
}
memset(dp,0,sizeof(dp));
max=0;
for(i=0;i<n;i++)
{
k=0;
for(j=0;j<m;j++)
{
if(a[i]>b[j]&&dp[k]<dp[j])
k=j;
if(a[i]==b[j])
dp[j]=dp[k]+1;
if(max<dp[j])
max=dp[j];
}
}
cout<<max<<endl;
if(t)cout<<endl;
}
return 0;
}