最长公共子序列(LCS)

来源:互联网 发布:小漠淘宝店网址 编辑:程序博客网 时间:2024/05/16 01:42
#include<iostream>   #include<cstdlib>  #include<cstdio>  #include<cmath>  #include<cstring>  #include<string>  #include<cstdlib>  #include<iomanip>  #include<vector>  #include<list>  #include<map>  #include<algorithm>  typedef long long LL;  using namespace std; const int maxn=100;const int N = 1000;int dp[N][N];#define max(a, b)(a>b ? a:b)int LCS(string a, string b){memset(dp, sizeof(dp), 0);for(int i=1; i<=a.length(); i++){for(int j=1; j<=b.length(); 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]);}}}return dp[a.length()][b.length()];}void solve(){string a, b;while( cin >> a >> b){int ret = LCS(a, b);cout << ret << endl;  //输出最长公共子序列(不连续) 的长度 }}int main(){solve();return 0;}


int dp[m+1][n+1];int Lcs(){ for(int i=0;i<m;i++) for(int j=0;j<n;j++)if(s1[i]==s2[j])  dp[i+1][j+1]=  dp[i][j]+1;else  dp[i+1][j+1]=  max(dp[i+1][j],dp[i][j+1]); return dp[m][n];}


1 0