题意:赤裸裸的求最长公共序列。 算法思路:dp。 dp[i][j]指前i和j有多长的相同的个数。 代码: a#include <iostream> using namespace std; int dp[512][512]; int main() { char a[512],b[512]; int i,j; while(scanf("%s%s",&a,&b)!=EOF) { memset(dp,0,sizeof(dp)); int la,lb; la = strlen(a); lb = strlen(b); for(i = 1 ; i <= la ; i++) for(j = 1 ; j <= lb ; j++) { if(a[i-1] == b[j-1]) dp[i][j] = dp[i-1][j-1]+1; else { dp[i][j] = dp[i-1][j]>dp[i][j-1] ? dp[i-1][j]:dp[i][j-1]; } } cout<<dp[la][lb]<<endl; } return 0; }