思路:首先主题思想是动态规划,建立一个二维数组,对两个字符串依次进行判断,每次去上一次的最优解加上当前状态,直至字符串比较完毕,最后的最优解即是整体的最优解。
例如:
123abc
abc123abc
将其dp数组输出即为:
代码如下:
#include<stdio.h> #include<string.h> #define max(a,b) (a>b?a:b) int dp[1010][1010]; int main(void) { char a[1010],b[1010]; int i,j,n; int al,bl; scanf("%d",&n); while(n--) { scanf("%s",a); scanf("%s",b); al=strlen(a); bl=strlen(b); for(i=1;i<=al;i++) { for(j=1;j<=bl;j++) { if(a[i-1]==b[j-1]) { dp[i][j]=dp[i-1][j-1]+1; } else { dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } } /* for(i=0;i<=al;i++) { for(j=0;j<=bl;j++) { printf("%d ",dp[i][j]); } printf(" "); } */ printf("%d ",dp[al][bl]); } return 0; }