zoukankan      html  css  js  c++  java
  • P1050

    问题 F: P1050

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 37  解决: 27
    [提交][状态][讨论版]

    题目描述

    一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。

    输入

    第一行两个字符串用空格分开。

    输出

    最长子串的长度。

    样例输入

    abccd aecd

    样例输出

    3

    提示

     两个串的长度均小于2000

    我是比较服的一道模板LCS题,题目名字高深,看不出,服了。。

    没什么好说的LCS,O(nm)复杂度

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    const int MAXN=2007;
    using namespace std;
    char s1[MAXN],s2[MAXN];
    int dp[MAXN][MAXN];
    int main()
    {
        memset(dp,0,sizeof(dp));
        scanf("%s%s",s1,s2);
        int len1=strlen(s1),len2=strlen(s2);    
        for (int i=1;i<=len1;i++)
            for (int j=1;j<=len2;j++)
                {
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                    if (s1[i-1]==s2[j-1]) dp[i][j]=max(dp[i-1][j-1]+1,dp[i][j]);
                }
        printf("%d",dp[len1][len2]);        
    }
  • 相关阅读:
    学习进度条05
    构建之法阅读笔记03
    子数组和最大值算法
    学习进度条04
    学习进度条03
    定制小学四则运算
    单元测试示例
    构建之法阅读笔记02
    学习进度条02
    decimal扩展方法(转换为字符串,去掉末尾的0)
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/6878212.html
Copyright © 2011-2022 走看看