• 51Nod 1006 最长公共子序列Lcs


    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
     
    比如两个串为:
     
    abcicba
    abdkscab
     
    ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
    Input
    第1行:字符串A
    第2行:字符串B
    (A,B的长度 <= 1000)
    Output
    输出最长的子序列,如果有多个,随意输出1个。
    Input示例
    abcicba
    abdkscab
    Output示例
    abca

     1 #include <stdio.h>
     2 #define  MAXN  1002
     3 char A[MAXN] = {0};
     4 char B[MAXN] = {0};
     5 char R[MAXN] = {0};
     6 short mat[MAXN][MAXN] = {0};
     7 short max(short a, short b, short c)
     8 {
     9     if(a > b){
    10         b = a;
    11     }
    12     return  b > c ? b : c;
    13 }
    14 int main()
    15 {
    16     int  i, j = 0, k;
    17     scanf("%s %s", A + 1, B + 1);
    18     for(i = 1; A[i]; i++){
    19         for(j = 1; B[j]; j++){
    20             mat[i][j] = max(mat[i-1][j], mat[i][j-1], mat[i-1][j-1] + (A[i]==B[j] ? 1 : 0));
    21         }
    22     }
    23     i--;
    24     j--;
    25     k = MAXN - 1;
    26     while(i > 0 && j > 0){
    27         if(A[i] == B[j]){
    28             R[k--] = A[i];
    29             i--;
    30             j--;
    31         }
    32         else if(mat[i-1][j] > mat[i][j-1]){
    33             i--;
    34         }
    35         else{
    36             j--;
    37         }
    38     }
    39     printf( "%s
    ", R + k + 1);
    40     return 0;
    41 }
  • 相关阅读:
    layui
    JSON
    jQuery
    实例——模拟验证码
    实例——表格的相关操作:添加行,删除行,编辑单元格
    实例——省市区三级联动 & 还可以输入字符统计
    实例练习——轮播图 & 全选/全不选
    练习-计算器
    定时器 & 日期时间对象 & 正则
    ThinkPHP实现分页
  • 原文地址:https://www.cnblogs.com/wydxry/p/7238064.html
Copyright © 2020-2023  润新知