sdut 2080 最长公共子序列问题
题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2080
代码:
View Code
1 #include<stdio.h> 2 #include<string.h> 3 int max(int a, int b) 4 { 5 if(a>b) 6 return a; 7 else 8 return b; 9 } 10 int main() 11 { 12 int len1,len2,i,j; 13 char str1[505],str2[505]; 14 int dp[505][505]; 15 while(gets(str1)!=NULL) 16 { 17 gets(str2); 18 len1=strlen(str1); 19 len2=strlen(str2); 20 for(i=0;i<len1;i++) 21 dp[i][0]=0; 22 for(i=0;i<len2;i++) 23 dp[0][i]=0; 24 for(i=1;i<=len1;i++) 25 for(j=1;j<=len2;j++) 26 { 27 if(str1[i-1]==str2[j-1]) 28 dp[i][j]=dp[i-1][j-1]+1; 29 else 30 dp[i][j]=max(dp[i-1][j],dp[i][j-1]); 31 } 32 printf("%d\n",dp[len1][len2]); 33 } 34 return 0; 35 }