最长公共子序列模板
/* 状态转移方程: re[i][j]=max(re[i-1][j],re[i][j-1],re[i-1][j-1]+(a[i]==b[j])) re[i][j]:长度为i的a串和长度为j的b串的公共最长子序列长度 */ #define maxn 1006 int re[maxn][maxn]; int Max(int a,int b,int c) { if(a<b) a=b; if(a<c) a=c; return a; } int main() { int t,i,j; char a[maxn],b[maxn]; scanf("%d",&t); while(t--) { scanf("%s %s",a+1,b+1); memset(re,0,sizeof(re)); int lena=strlen(a),lenb=strlen(b); for(i=1;i<lena;++i) for(j=1;j<lenb;++j) { re[i][j]=Max(re[i-1][j],re[i][j-1],re[i-1][j-1]+(a[i]==b[j])); } printf("%d\n",re[lena-1][lenb-1]); } return 0; }