思路:首先主題思想是動態規劃,建立一個二維數組,對兩個字符串依次進行判斷,每次去上一次的最優解加上當前狀態,直至字符串比較完畢,最後的最優解即是整體的最優解。
例如:
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("\n"); } */ printf("%d\n",dp[al][bl]); } return 0; }