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

    题目描述:

    字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列<i0,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij=yj。
    例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。
    给定两个字符串,求他们的最长公共子序列。

    输入:

    输入两行,每行输入一个字符串,只包括小写字母。

    输出:

    输出最长公共子序列长度。

    样例输入:

    abcfbc
    abfcab

    样例输出:

    4

    最长公共子串和最长公共子序列的区别为:子串是串的一个连续部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得的新的序列;也就是说。子串中字符的位置必须是连续的,子序列则可以不必连续。
    代码来喽:

       #include<cstdio>
        #include<cstdlib>
        #include<cstring>
        #include<iostream>
        using namespace std;
        char s1[1005],s2[1005];
        int dp[1005][1005];
        int main()
        {
        while(scanf("%s%s",s1+1,s2+1)!=EOF)
        {
            int n=strlen(s1+1),m=strlen(s2+1);
            dp[0][0];
            for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                if(s1[i]==s2[j])
                dp[i][j]=dp[i-1][j-1]+1;
                else
                dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
            }
            printf("%d
    ",dp[n][m]);
        }
        return 0;
        } 
  • 相关阅读:
    SQL Server逻辑读、预读和物理读
    SQL Server 视图
    SQL Server存储机制
    SQLServer
    数据库配置问题整理贴
    分析存储过程重编译的起因以及避免
    存储过程重编译的优点、缺点、确定引发语句
    查询反模式
    查询反模式
    状压DP的总结
  • 原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8067376.html
Copyright © 2011-2022 走看看