http://acm.hdu.edu.cn/showproblem.php?pid=1423
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 <cstring> using namespace std; int a[501],b[501]; int dp[501][501]; int main() { int t,len1,len2,max; cin>>t; while(t--) { memset(dp,0,sizeof(dp)); cin>>len1; for(int i=1; i<=len1; i++) { cin>>a[i]; } cin>>len2; for(int j=1; j<=len2; j++) { cin>>b[j]; } for(int i=1; i<=len1; i++) { max=0; for(int j=1; j<=len2; j++) { dp[i][j]=dp[i-1][j]; if(a[i]>b[j]&&max<dp[i-1][j]) { max=dp[i-1][j]; } if(a[i]==b[j]) { dp[i][j]=max+1; } } } max=0; for(int j=1; j<=len2; j++) { if(max<dp[len1][j]) { max=dp[len1][j]; } } cout<<max<<endl; if(t) { cout<<endl; } } return 0; }