zoukankan      html  css  js  c++  java
  • LCS以及输出路径模板

    记忆

    两个for用来寻找LCS,DP是二维的,每一维代表了字符串的长度。

    寻找的代码部分

    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]);
    

    如果相等左上+1否则左边上面取最大值

    输出路径的时候从最右下开始如果左边相等左移右边相等右移,否则大于左上左上移动记录此时的字符,并且要倒叙输出

    while(dp[i][j])
      {
        if(dp[i][j]==dp[i-1][j])
        i--;
        else if(dp[i][j]==dp[i][j-1])
        j--;
        else if(dp[i][j]>dp[i-1][j-1])
        i--,j--,t+=a[i];
      }
    

    完整板子(输出两个字符串的LCS个数以及LCS)

    #include <bits/stdc++.h>
    using namespace std;
    int dp[1000][1000];
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      string a,b,t="";
      cin>>a>>b;
      for(int i=1;i<=a.size();i++)
      for(int j=1;j<=b.size();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]);
      int i=a.size(),j=b.size();
      while(dp[i][j])
      {
        if(dp[i][j]==dp[i-1][j])
        i--;
        else if(dp[i][j]==dp[i][j-1])
        j--;
        else if(dp[i][j]>dp[i-1][j-1])
        i--,j--,t+=a[i];
      }
      reverse(t.begin(),t.end());
      cout<<dp[a.size()][b.size()]<<"
    "<<t;
    }
    
  • 相关阅读:
    Windows7旗舰版安装VS2008的SP1的问题(KB945140, KB947888)
    Hex RGB颜色值互换
    php沥遍目录结构
    linux ftp设置
    Android开发环境搭建
    php读取excel文件
    wordpress插件制作
    wordpress主题制作
    php读取excel文件(OLERead.php页代码)
    php ios推送
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/10264215.html
Copyright © 2011-2022 走看看