zoukankan      html  css  js  c++  java
  • 求序列1和序列2的最长公共子序列-基于动态规划方法

     1 #include <cstdlib>
     2 #include <iostream>
     3 #include <cstring>
     4 
     5 using namespace std;
     6 
     7 class maxlen_string
     8 {
     9  public:
    10    void string_();
    11    void LCSLength(int,int,char*,char*,int**,int**);
    12    void LCS(int,int,char*,int**);
    13    ~maxlen_string(){}
    14 }; 
    15 
    16 
    17 
    18 void maxlen_string::LCSLength(int m,int n,char* x,char* y,int**c,int**b)
    19 {
    20   int i,j;
    21   for(i=1;i<=m;i++) c[i][0]=0;
    22   for(i=1;i<=n;i++) c[0][i]=0;
    23   for(i=1;i<=m;i++)
    24    for(j=1;j<=n;j++)
    25    {
    26     if(x[i]==y[j]) {c[i][j]=c[i-1][j-1]+1;b[i][j]=1;}
    27     else if(c[i-1][j]>=c[i][j-1]) {c[i][j]=c[i-1][j];b[i][j]=2;}
    28         else  {c[i][j]=c[i][j-1];b[i][j]=3;}                 
    29    }       
    30 } 
    31 
    32 void maxlen_string::LCS(int i,int j,char* x,int**b)
    33 {
    34   if(i==0||j==0) return;
    35   if(b[i][j]==1) {LCS(i-1,j-1,x,b);std::cout<<x[i];}
    36     else if(b[i][j]==2) LCS(i-1,j,x,b);
    37        else LCS(i,j-1,x,b);
    38 }
    39 
    40 void maxlen_string::string_()
    41 {
    42    char x[1000],y[1000];
    43     char*x_=x;char*y_=y;
    44     x_++;y_++;
    45     x[0]='a';y[0]='b';
    46     
    47     cout<<"Please input sting 1:"<<std::endl;
    48     cin>>x_;
    49     cout<<"Please input sting 2:"<<std::endl;
    50     cin>>y_;
    51     int m=strlen(x);
    52     int n=strlen(y);
    53     int**c;int**b;
    54     c=new int*[m+1];b=new int*[m+1];
    55     for(int i=0;i<=m;++i) 
    56         { c[i]=new int[n+1];b[i]=new int[n+1];}
    57     LCSLength(m,n,x,y,c,b);
    58       cout<<"the max length of commen substring is:"<<endl;  
    59     LCS(m,n,x,b);
    60 }
    61 
    62 
    63 int main(int argc, char *argv[])
    64 {
    65     maxlen_string aa;
    66     aa.string_();
    67     system("PAUSE");
    68     return EXIT_SUCCESS;
    69 }

    example:

  • 相关阅读:
    UVa 1451 Average (斜率优化)
    POJ 1160 Post Office (四边形不等式优化DP)
    HDU 3507 Print Article (斜率DP)
    LightOJ 1427 Substring Frequency (II) (AC自动机)
    UVa 10245 The Closest Pair Problem (分治)
    POJ 1741 Tree (树分治)
    HDU 3487 Play with Chain (Splay)
    POJ 2828 Buy Tickets (线段树)
    HDU 3723 Delta Wave (高精度+calelan数)
    UVa 1625 Color Length (DP)
  • 原文地址:https://www.cnblogs.com/jieforever/p/4684098.html
Copyright © 2011-2022 走看看