zoukankan      html  css  js  c++  java
  • LCS 算法

    f[i][j] 一定是 f[i-1][j] 和 F【i】[j-1] 转移过来的。

    如果 把 a 串  看成字符数组 s1[], b 串 看成 s2[] ;

    则:

         如果 s1[i]!=s2[j] 

         那么 从 f[i-1][j] 和 f[i][j-1] 取一个最大值 记录到 F【i] [j].

        代码如下:

                     

     f[i][j]=max(f[i-1][j],f[i][j-1]);
    

          如果 s1[i] == s2[j]

          那么 f[i][j] 是由 F【i-1][j-1]+1 推来的;

    用dp方程式可以推出,如图:

                                       

    最后附上代码:

                    

          

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char s1[50000],s2[50000];
     4 int f[500][500];
     5 int main(){
     6     scanf("%s%s",s1+1,s2+1);
     7     int l1= strlen(s1+1),l2= strlen(s2+1);
     8     for(int i=1;i<=l1;i++)
     9         for(int j=1;j<=l2;j++)
    10             if(s1[i]!=s2[j])f[i][j]=max(f[i-1][j],f[i][j-1]);
    11             else f[i][j]=f[i-1][j-1]+1; 
    12     printf("%d
    ",f[l1][l2]); 
    13 } 

    OVER!

  • 相关阅读:
    2016huasacm暑假集训训练四 递推_A
    2016huasacm暑假集训训练三 G
    2016huasacm暑假集训训练三 F
    今年暑假不AC
    Who's in the Middle
    The Suspects
    食物链
    抓牛问题
    士兵队列训练问题
    H
  • 原文地址:https://www.cnblogs.com/wangshengjun/p/LCS.html
Copyright © 2011-2022 走看看