zoukankan      html  css  js  c++  java
  • LCS

    最长公共子序列的记忆化搜索模板

    a,b数组分别存两个字符串,dp数组初始化为-1

    s1表示a串起始地址,e1表示a串结束地址+1,s2、e2同理表示b串

    int LCS(int s1,int e1,int s2,int e2)
    {
        if(dp[s1][s2]!=-1)
            return dp[s1][s2] ;
        if(s1==e1 || s2==e2)
            return dp[s1][s2]=0 ;
        if(a[s1]==b[s2])
            return dp[s1][s2]=1+LCS(s1+1,e1,s2+1,e2) ;
        else    
            return dp[s1][s2]=max(LCS(s1,e1,s2+1,e2),LCS(s1+1,e1,s2,e2)) ;
    }
    View Code

     下面这个是递推方法的模板,字母解释同上,dp数组初始化为0

    int LCS(int s1,int e1,int s2,int e2)
    {
        memset(dp,0,sizeof(dp)) ;
         for(int i=s1+1 ;i<=e1 ;i++)
              for(int j=s2+1 ;j<=e2 ;j++)
            {
                 if(a[i-1]==b[j-1])
                       dp[i][j]=dp[i-1][j-1]+1 ;
                  else
                       dp[i][j]=max(dp[i-1][j],dp[i][j-1]) ;
             }
        return dp[e1][e2] ;
    }
    View Code
  • 相关阅读:
    NAT和PAT
    谷歌浏览器如何正确离线网页
    安全
    VLAN
    交换
    动态路由
    静态路由
    配置Cisco网络设备
    导数表和基本积分表
    HNOI/AHOI2018题解
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/3467333.html
Copyright © 2011-2022 走看看