zoukankan      html  css  js  c++  java
  • C++练习 | 最长公共字符串(DP)

    HDU 1159.Common Subsequence

    #include<iostream>
    #include<stdio.h>
    #include<string>
    #include<cstring>
    #include<string.h>
    using namespace std;
    int dp[10007][10007];//a的前i个字母与b的前j个字母的有序交集长度
    int main()
    {
        // freopen("01.in","r",stdin);
        string a,b;
        while(cin>>a>>b)
        {
            int m=a.length();
            int n=b.length();
            dp[0][0]=0;
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(a[i]==b[j])
                    {
                        if(j!=0&&i!=0)
                            dp[i][j]=dp[i-1][j-1]+1;
                        else
                            dp[i][j]=1;
                    }
                    else
                    {
                        if(j!=0&&i!=0)
                        {
                            dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                        }
                        else if(i==0)
                        {
                            dp[i][j]=max(0,dp[i][j-1]);
                        }    
                        else
                        {
                            dp[i][j]=max(0,dp[i-1][j]);
                        }    
                    }
                }
            }
            cout<<dp[m-1][n-1]<<endl;
        }
        return 0;
    }

    零点处理有些过于麻烦了,可以通过更改i,j初始值简化,但是懒得改了

    不算太明白以后再看看

  • 相关阅读:
    线程
    链表
    String 练习
    23种设计模式
    静态方法
    ASCII码及UTF-8概义
    java语法基础
    二进制、八进制、十进制、十六进制之间转换
    数组概意
    java程序安装 配置环境变量
  • 原文地址:https://www.cnblogs.com/tsj816523/p/11226583.html
Copyright © 2011-2022 走看看