九度OJ 1042 Coincidence (动态规划求最长公共子序列)
求两串的最长公共子序列。算导上的动态规划样例:
#include<stdio.h> #include<string.h> char a[101]; char b[101]; int c[101][101]; int i,j; void lcs(){ int ans=0; int m=strlen(a); int n=strlen(b); memset(c,0,sizeof(c)); for(i=0;i<m;++i) c[i][0]=0; for(i=0;i<n;++i) c[0][i]=0; for(i=1;i<=m;++i) for(j=1;j<=n;++j) { if(a[i-1]==b[j-1]) { c[i][j]=c[i-1][j-1]+1; } else if(c[i-1][j]>=c[i][j-1]){ c[i][j]=c[i-1][j]; } else { c[i][j]=c[i][j-1]; } } printf("%d\n",c[m][n]); } int main(int argc, char *argv[]) { while(~scanf("%s%s",a,b)) { lcs(); } return 0; }