#include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <map> #define inf 0x3f3f3f3f #define ll __int64 using namespace std; char s1[10050],s2[10050]; int dp[10050][10050],l1,l2; int main() { int i,j; while(~scanf("%s%s",s1,s2)) { l1=strlen(s1); l2=strlen(s2); memset(dp,0,sizeof dp); for(i=1;i<=l1;i++) { for(j=1;j<=l2;j++) { if(s1[i-1]==s2[j-1]) dp[i][j]=max(dp[i-1][j-1]+1,dp[i][j]); else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } printf("%d\n",dp[l1][l2]); } return 0; }
poj 1458 Common Subsequence --- LCS模板
原文:http://blog.csdn.net/u011032846/article/details/19054003