Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6811 Accepted Submission(s): 2210
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<iostream> #include<stdio.h> #include<string.h> using namespace std; const int N=205; int a[N],b[N],dp[N]; int main() { int t,n,m; cin>>t; while(t--) { cin>>n; for(int i = 1; i<=n; i++) scanf("%d",&a[i]); cin>>m; for(int i = 1; i<=m; i++) scanf("%d",&b[i]); int ans=0; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { int k=0; for(int j=1;j<=m;j++) { if(a[i]==b[j]) { dp[j]=max(dp[j],dp[k]+1); } else if(a[i]>b[j]&&dp[k]<dp[j]) k=j; if(ans<dp[j]) ans=dp[j]; } } cout<<ans<<endl; if(t) cout<<endl; } return 0; }