zoukankan      html  css  js  c++  java
  • 【模板】南阳理工--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 }
  • 相关阅读:
    总结一下矩阵的基本操作
    洛谷|P4281 [AHOI2008]紧急集合 / 聚会
    CQYZ OJ|Contest 133|祖孙询问
    博客主题分享
    USACO1.1|黑色星期五Friday the Thirteenth
    USACO1.1.2|贪婪的送礼者
    POJ1664|DFS水题
    树状数组的区间查询与区间修改
    N0lP2018爆零记录
    A了一道dijkstra板子
  • 原文地址:https://www.cnblogs.com/hss-521/p/7326822.html
Copyright © 2011-2022 走看看