POJ 1458 Common Subsequence
最长公共子序列
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=1000+10; int a[maxn],b[maxn]; int dp[maxn][maxn]; char s[maxn]; int main() { while(~scanf("%s",s)) { for(int i=0; s[i]; i++) a[i+1]=s[i]-'a'; int len1=strlen(s); scanf("%s",s); for(int i=0; s[i]; i++) b[i+1]=s[i]-'a'; int len2=strlen(s); for(int i=0; i<=max(len1,len2); i++) dp[i][0]=0,dp[0][i]=0; for(int i=1; i<=len1; i++) { for(int j=1; j<=len2; j++) { if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } printf("%d\n",dp[len1][len2]); } return 0; }