Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18765 Accepted Submission(s): 7946
1 #include <iostream>
2
3 using namespace std; 4 int dp[2001][2001]; 5 int main() 6 { 7 //dp[i][j]代表着a取前i个字符和b取前j个字符时的最长公共子序列的大小
8 char a[2001],b[2001]; 9 while(cin>>a>>b){ 10 int i,j; 11 int al,bl; 12 for(i=0;a[i]!='\0';i++); //计算a、b字符串长度
13 for(j=0;b[j]!='\0';j++); 14 al=i;bl=j; 15
16 for(i=0;i<=al;i++) //dp[][]初始化
17 dp[i][0]=0; 18 for(i=0;i<=bl;i++) 19 dp[0][i]=0; 20
21 for(i=1;i<=al;i++) //计算dp[][]
22 for(j=1;j<=bl;j++){ 23 if(a[i-1]==b[j-1]) 24 dp[i][j]=dp[i-1][j-1]+1; 25 else
26 dp[i][j] = dp[i-1][j] > dp[i][j-1] ? dp[i-1][j] : dp[i][j-1]; 27 } 28
29 cout<<dp[al][bl]<<endl; 30 } 31 return 0; 32 }
1 #include <stdio.h>
2 #include <stdlib.h>
3 int dp[1001][1001]; 4 int main() 5 { 6 char a[1000],b[1000]; 7 while(scanf("%s%s",a,b)!=EOF){ 8 int i,j; 9 int al,bl; 10 for(i=0;a[i]!='\0';i++); 11 for(j=0;b[j]!='\0';j++); 12 al=i;bl=j; 13 for(i=0;i<=al;i++) 14 dp[i][0]=0; 15 for(j=0;j<=bl;j++) 16 dp[0][j]=0; 17 for(i=1;i<=al;i++) 18 for(j=1;j<=bl;j++){ 19 if(a[i-1]==b[j-1]) 20 dp[i][j] = dp[i-1][j-1]+1; 21 else
22 dp[i][j] = dp[i-1][j] > dp[i][j-1] ? dp[i-1][j] : dp[i][j-1]; 23 } 24 printf("%d\n",dp[al][bl]); 25 } 26 return 0; 27 }
Freecode : www.cnblogs.com/yym2013