标签:
Description
Input
Output
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
题意:求最大公共子序列的长度
解题思路:
用d[i][j]表示公共子序列的长度。
如果x[i-1]==y[j-1]
d[i][j]=d[i-1][j-1]+1
否则
d[i][j]=max(d[i-1][j],d[i][j-1])
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 int max(int a,int b) 4 { 5 return a>b?a:b; 6 } 7 char x[1000],y[1000]; 8 int d[1000][1000]; 9 int main() 10 { 11 while(scanf("%s%s",&x,&y)!=EOF) 12 { 13 //memset(d,0,sizeof(d)); 14 int lenx=strlen(x),leny=strlen(y); 15 for(int i=1; i<=lenx; i++) 16 { 17 for(int j=1; j<=leny; j++) 18 { 19 if(x[i-1]==y[j-1]) 20 { 21 d[i][j]=d[i-1][j-1]+1; 22 //printf("x[%d]=%c y[%d]=%c d[%d][%d]=%d %d\n",i-1,x[i-1],j-1,y[j-1],i-1,j-1,d[i-1][j-1],d[i][j]); 23 } 24 else 25 { 26 d[i][j]=max(d[i-1][j],d[i][j-1]); 27 // printf("x[%d]=%c y[%d]=%c d[%d][%d]=%d d[%d][%d]=%d %d\n",i-1,x[i-1],j-1,y[j-1],i-1,j,d[i-1][j],i,j-1,d[i][j-1],d[i][j]); 28 } 29 30 } 31 } 32 printf("%d\n",d[lenx][leny]); 33 } 34 }
标签:
原文地址:http://www.cnblogs.com/huangguodong/p/4734972.html