poj 1458 Common Subsequence 最基本的LCS 最長公共子序列
阿新 • • 發佈:2019-02-04
剛好對應演算法導論 15.4 最長公共子序列
#include <iostream> #include <stdio.h> #include <cstring> using namespace std; string strA,strB; #define MAX_N (2000+1) unsigned short dp[MAX_N][MAX_N]; int lcs(string stra,string strb) { int la=stra.length(); int lb=strb.length(); dp[0][0]=0; for(int i=0;i<la;i++) dp[i][0]=0; for(int j=0;j<lb;j++) dp[0][j]=0; for(int i=0;i<la;i++) { for(int j=0;j<lb;j++) { int rel_i = i+1; int rel_j = j+1; if(stra[i] == strb[j]) { dp[rel_i][rel_j] = dp[rel_i-1][rel_j-1] + 1; } else { dp[rel_i][rel_j] = max(dp[rel_i-1][rel_j],dp[rel_i][rel_j-1]); } } } return dp[la+1-1][lb+1-1]; } int main() { while(cin>>strA>>strB) { //cout<<"strA:"<<strA<<"strB:"<<strB<<endl; cout<<lcs(strA,strB)<<endl; } }