设为首页 加入收藏

TOP

hdu 1503 最大公共子序列+输出路径
2015-11-21 01:03:02 来源: 作者: 【 】 浏览:2
Tags:hdu 1503 最大 公共 序列 输出 路径

?

?

#include
  
   
#include
   
     #include
     
     using namespace std
     ; int max
     (int a
     ,int b
     ) { return a
     >a
     ?a
     :b
     ; } char str1
     [110
     ],str2
     [110
     ]; int mark
     [110
     ][110
     ]; int deal
     (int i
     ,int j
     ) { 
      if(i
     ==0
     &&j
     ==0
     ) return 0
     ; if(mark
     [i
     ][j
     ]==0
     ) { deal
     (i
     -1
     ,j
     -1
     ); printf
     ("%c"
     ,str1
     [i
     -1
     ]); } else if(mark
     [i
     ][j
     ]==1
     ) { deal
     (i
     -1
     ,j
     ); printf
     ("%c"
     ,str1
     [i
     -1
     ]); } else if(mark
     [i
     ][j
     ]==2
     ) { deal
     (i
     ,j
     -1
     ); printf
     ("%c"
     ,str2
     [j
     -1
     ]); } return 0
     ; } int main() { int i
     ,j
     ; int dp
     [110
     ][110
     ]; while(~scanf
     ("%s%s"
     ,str1
     ,str2
     )) { int len1
     =strlen
     (str1
     ); int len2
     =strlen
     (str2
     ); memset
     (dp
     ,0
     ,sizeof(dp
     )); for(i
      = 0
     ;i
     <=len1
     ;i
     ++) mark
     [i
     ][0
     ] = 1
     ; for(i
      = 0
     ;i
     <=len2
     ;i
     ++) mark
     [0
     ][i
     ] = 2
     ; for(i
     =1
     ;i
     <=len1
     ;i
     ++) { for(j
     =1
     ;j
     <=len2
     ;j
     ++) { if(str1
     [i
     -1
     ]==str2
     [j
     -1
     ]) { dp
     [i
     ][j
     ]=dp
     [i
     -1
     ][j
     -1
     ]+1
     ; mark
     [i
     ][j
     ]=0
     ; } else { //dp[i][j]=max(dp[i-1][j],dp[i][j-1]); 
      if(dp
     [i
     -1
     ][j
     ]>=dp
     [i
     ][j
     -1
     ]) { dp
     [i
     ][j
     ]=dp
     [i
     -1
     ][j
     ]; mark
     [i
     ][j
     ]=1
     ; } else { mark
     [i
     ][j
     ]=2
     ; dp
     [i
     ][j
     ]=dp
     [i
     ][j
     -1
     ]; } } } } //printf("****\n"); deal
     (len1
     ,len2
     ); printf
     ("\n"
     ); } return 0
     ; }
    
   
  

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA - 1617 Laptop 区间维护 下一篇C++ set的一些用法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: