zoukankan      html  css  js  c++  java
  • 1006 最长公共子序列Lcs

     
    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     
    给出两个字符串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 /*
     2     记录一下dp是怎么走的 
     3     最后再dfs走回去 
     4 */
     5 #include <ctype.h>
     6 #include <cstdio>
     7 #include <cstring>
     8 
     9 const int MAXN=1010;
    10 
    11 char s1[MAXN],s2[MAXN];
    12 
    13 int f[MAXN][MAXN],pre[MAXN][MAXN];
    14 
    15 inline void read(int&x) {
    16     register char c=getchar();
    17     for(x=0;!isdigit(c);c=getchar());
    18     for(;isdigit(c);x=x*10+c-48,c=getchar());
    19 }
    20 
    21 inline int max(int x,int y) {
    22     return x<y?y:x;
    23 }
    24 
    25 void dfs(int len1,int len2) {
    26     if(len1==0||len2==0) return;
    27     if(pre[len1][len2]==1) {
    28         dfs(len1-1,len2-1);
    29         printf("%c",s1[len1]);
    30     }
    31     else if(pre[len1][len2]==2) dfs(len1-1,len2);
    32     else dfs(len1,len2-1);
    33 }
    34 
    35 int main() {
    36     scanf("%s%s",s1+1,s2+1);
    37     int l1=strlen(s1+1),l2=strlen(s2+1);
    38     for(int i=1;i<=l1;++i)
    39       for(int j=1;j<=l2;++j) {
    40           if(s1[i]==s2[j]) {
    41               f[i][j]=f[i-1][j-1]+1;
    42               pre[i][j]=1;
    43         }
    44           else if(f[i-1][j]>f[i][j-1]){
    45               f[i][j]=f[i-1][j];
    46               pre[i][j]=2;
    47         }
    48         else {
    49               f[i][j]=f[i][j-1];
    50               pre[i][j]=3;
    51         }
    52       }
    53     dfs(l1,l2);
    54     return 0;
    55 }
    代码


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    docker网络
    docker-registry搭建
    JDK1.8源码安装
    docker-compose应用
    docker-compose介绍
    docker commit
    CMD/ENTROYPOINT区别
    第一个dockerfile
    SpringBoot整合Mybatis对单表的增、删、改、查操作
    向上取整、向下取整
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7359925.html
Copyright © 2011-2022 走看看