最长公共子序列

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int LCS(string a, string b){
  int n=a.length();
  int m=b.length();
  int **C=new int* [n+1];
  for (int i=0; i<n+1; i++)
    C[i]=new int[m+1];
  for (int i=0; i<n+1; i++)
    C[i][0]=0;
  for (int j=0; j<m+1; j++)
    C[0][j]=0;
  //int C[n+1][m+1];
  //for (int i=0; i<n+1; i++)
  //  C[i][0]=0;
  //for (int j=0; j<m+1; j++)
  //  C[0][j]=0;
  for (int i=1; i<n+1; i++){
    for (int j=1; j<m+1; j++){
      if (a[i-1]==b[j-1])
        C[i][j]=C[i-1][j-1]+1;
      else if (C[i-1][j]>C[i][j-1])
        C[i][j]=C[i-1][j];
      else
        C[i][j]=C[i][j-1]; 
    }
  }
  int len=C[n][m];
  for (int i=0; i<n; i++)
    delete[] C[i];
  delete[] C;
  //memset(C, 0, sizeof(C));
  return len;
}
int main(){
  int t;
  string a, b;
  cin>>t;
  while (t--){
    cin>>a;
    cin>>b;
    int k=LCS(a, b);
    cout<<k<<endl;
  }
}

  

原文地址:https://www.cnblogs.com/a863886199/p/6628549.html