hdu 1423 最长递增公共子序列

2015-11-21 01:02:59 · 作者: · 浏览: 6
#include
  
   
#include
   
     #include
     
     using namespace std
     ; int max
     (int a
     ,int b
     ) { return a
     >b
     ?a
     :b
     ; } int main() { int T
     ,i
     ,j
     ,n
     ,m
     ,num1
     [510
     ],num2
     [510
     ]; int dp
     [510
     ][510
     ]; scanf
     ("%d"
     ,&T
     ); while(T
     --) { scanf
     ("%d"
     ,&n
     ); for(i
     =1
     ;i
     <=n
     ;i
     ++) scanf
     ("%d"
     ,&num1
     [i
     ]); scanf
     ("%d"
     ,&m
     ); for(i
     =1
     ;i
     <=m
     ;i
     ++) scanf
     ("%d"
     ,&num2
     [i
     ]); int Max
     ; for(i
     =1
     ;i
     <=n
     ;i
     ++) {
Max =0 ; for(j =1 ;j <=m ;j ++) { if(num2 [j ]<num1 [i ]&&Max <dp [i -1 ][j ]) { Max =dp [i -1 ][j ]; } dp [i ][j ]=dp [i -1 ][j ]; if(num1 [i ]==num2 [j ]) { dp [i ][j ]=Max +1 ; } } } Max =0 ; for(i =1 ;i <=m ;i ++) if(dp [n ][i ]>Max ) Max =dp [n ][i ]; printf ("%d\n" ,Max ); if(T )printf ("\n" ); } return 0 ; }