题目大意:给你连个字符串A 和 B , 让你求A 和 B 的最长公共子序列。
解题思路:此题属简单的DP 问题, 具体讲解推荐以下博客:
http://blog.csdn.net/yysdsyl/article/details/4226630
我的代码如下:
#include<iostream> #include<cstring> #include<cstdio> #include<string> #include<algorithm> #include<cmath> using namespace std ; const int MAXN = 1e4 + 5 ; char x[MAXN] ; char y[MAXN] ; int L[MAXN][MAXN] ; void solve() { int lenx = strlen(x) ; int leny = strlen(y) ; int i , j ; for(i = 0 ; i <= lenx ; i ++) L[i][0] = 0 ; for(j = 0 ; j <= leny ; j ++) L[0][j] = 0 ; for(i = 1 ; i <= lenx ; i ++) { for(j = 1 ; j <= leny ; j ++) { if(x[i - 1] == y[j - 1]) { L[i][j] = L[i - 1][j - 1] + 1 ; } else { L[i][j] = max(L[i - 1][j] , L[i][j - 1]) ; } } } printf("%d\n" , L[lenx][leny]) ; } int main() { while (scanf("%s" , x) != EOF) { scanf("%s" , y) ; solve() ; } return 0 ; }