• 【模板】南阳理工--36 最长公共子序列


    描述咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
    tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。

     
    输入
    第一行给出一个整数N(0<N<100)表示待测数据组数
    接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
    输出
    每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
    样例输入
    2
    asdf
    adfsd
    123abc
    abc123abc
    样例输出
    3
    6
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 int dp[1010][1010]={0};
     6 int main()
     7 {
     8     int n;
     9     char strl1[1000+10];
    10     char strl2[1000+10];
    11     scanf("%d",&n);
    12     while(n--)
    13     {
    14         scanf("%s",strl1+1);
    15         scanf("%s",strl2+1);
    16         strl1[0]='0';
    17         strl2[0]='0';
    18         int len1=strlen(strl1)-1;
    19         int len2=strlen(strl2)-1;
    20     //    dp[1010][1010]={0};        //大数组定义和初始化应在函数外
    21         for(int i=1;i<=len1;i++)
    22         {
    23             for(int j=1;j<=len2;j++)
    24             {
    25                 if(strl1[i]==strl2[j])
    26                 {
    27                     dp[i][j]=dp[i-1][j-1]+1;
    28                 }
    29                 else
    30                 {
    31                     dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
    32                 }
    33             }
    34         }
    35         printf("%d
    ",dp[len1][len2]);
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    SqlDependency和SqlCacheDependency的若干说明
    sublime 3 随笔
    [有得]解决redmine写操作很慢的问题
    Java双重循环
    使用 Docker 打包 Rust Web 服务
    Centos8.3、hadoop-2.6.4 简单的日志分析实验
    广域网数据交换的三种方式
    计算机的起源与发展
    推荐两款生成数据库表结构说明文档工具
    Centos8.3、docker部署springboot项目实战记录
  • 原文地址:https://www.cnblogs.com/hss-521/p/7326822.html
Copyright © 2020-2023  润新知