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

    对于两个数串a,b,求他们的最长公共子序列

    多说不易,还是直接上代码分析吧。

    void dp()
    {
      int i, j, k;
      for(i = 1;i<=n;i++)//循环枚举a[i],b[j]


      {
        for(j=1;j<=n;j++)
        {
          f[i][j]=f[i-1][j];//若匹配则进行如下操作替换掉f[i][j]的值,若不匹配因为a[i]!=b[j]所以f[i][j]=f[i-1][j]也不影响结果
          if(a[i]==b[j])
          {
            int maxx=0;
            for(k=1;k<=j-1;k++)
              if(b[j]>b[k])
              {
                maxx=max(maxx,f[i-1][k]);//在a[1到i-1]与b[1到j]最长公共子序列
              }
           f[i][j]=maxx+1;
           }
         }
       }
       int ans = 0;
       for(int i=1;i<=n;i++) ans=max(ans,f[n][i]);
       printf("%d ", ans);
    }

    孤城,一人,独醉
  • 相关阅读:
    08简单推导:手机尾号评分
    07简单推导:生日蜡烛
    06普通推导
    05简单推导:猴子吃桃
    简单推导
    03map用法
    List题目
    02List的使用
    01基础知识
    HDU
  • 原文地址:https://www.cnblogs.com/wjj226316/p/11618545.html
Copyright © 2011-2022 走看看