Greatest Common Increasing Subsequence

 1 /*HDU1423 最长公共递增*/
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <iostream>
 5 using namespace std;
 6 #define N 550
 7 int dp[N][N];
 8 int s[N],t[N];
 9 
10 int main()
11 {
12     int t1;
13     while(scanf("%d",&t1)!=EOF)
14     {
15       while(t1--)
16      {
17             int n,m;
18             scanf("%d",&n);
19             for(int i=1;i<=n;i++)
20                 scanf("%d",&s[i]);
21             scanf("%d",&m);
22             for(int i=1;i<=m;i++)
23                 scanf("%d",&t[i]);
24             memset(dp,0,sizeof(dp));
25             int mx=0;
26             for(int i=1;i<=n;i++)
27             {
28                 mx=0;
29                 for(int j=1;j<=m;j++)
30                 {
31                     dp[i][j] = dp[i-1][j];
32                     if( s[i]>t[j])
33                     {
34                         mx=dp[i-1][j];
35                     }
36                     if( s[i] == t[j] )
37                     {
38                         dp[i][j]=mx+1;
39                     }
40                 }
41             }
42             mx=-1;
43             int id;
44             for(int i=1;i<=m;i++)
45                 if(dp[n][i]>mx)
46                 {
47                     mx=dp[n][i];
48                 }
49             printf("%d\n",mx);
50             if(t1!=0) printf("\n");
51         }
52       }
53     return 0;
54 }

 

posted on 2013-08-05 16:05  ok_boy  阅读(188)  评论(0编辑  收藏  举报

导航