这部分代码是关于最长公共子序列的动态规划求法的,同样的代码已经在博客园贴过。在这里贴主要是为了比较一下在博客里贴代码的效果。呵呵,各有特色,不过更喜欢博客园的着色方案。 #include<iostream> using namespace std; int ans[101][101],s[101][101],m,n; char x[100],y[100]; int LCS() { memset(ans,0,sizeof(ans)); m=strlen(x); n=strlen(y); int i,j; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(x[i-1]==y[j-1]) { ans[i][j]=ans[i-1][j-1]+1; s[i-1][j-1]=1; } else if(ans[i-1][j]>=ans[i][j-1]) { ans[i][j]=ans[i-1][j]; s[i-1][j-1]=2; } else { ans[i][j]=ans[i][j-1]; s[i-1][j-1]=3; } } } return ans[m][n]; } void pr(int i,int j) { if(i==-1||j==-1) return ; if(s[i][j]==1) { pr(i-1,j-1); printf("%c",y[j]); } else if(s[i][j]==2) pr(i-1,j); else pr(i,j-1); } int main() { while(scanf("%s%s",x,y)==2) { printf("%d/n",LCS()); pr(m-1,n-1); printf("/n"); } return 0; }