![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 #include <string.h> 3 #include<iostream> 4 #define maxn 505 5 using namespace std; 6 int dp[ maxn ][ maxn ]; 7 int main(){ 8 char str1[ maxn ],str2[ maxn ]; 9 //string str1,str2; 10 while ( scanf("%s%s",str1,str2)!=EOF ) { 11 int len1,len2; 12 len1 = strlen( str1 ); 13 len2 = strlen( str2 ); 14 memset(dp,0,sizeof(dp)); 15 int ans=0; 16 for( int i = 0 ; i < len1 ; i++ ){ 17 dp[ i ][ 0 ]=0; 18 } 19 for( int i = 0 ; i < len2 ; i ++ ){ 20 dp[ 0 ][ i ]=0; 21 } 22 23 for( int i = 1 ; i <= len1 ; i ++ ){ 24 for( int j = 1 ; j <= len2 ; j ++){ 25 if( str1[ i-1 ] == str2[ j-1 ] ){ 26 dp[ i ][ j ]=dp[ i-1 ][ j-1 ]+1; 27 } 28 else{ 29 dp[ i ][ j ]=max( dp[ i-1 ][ j ], dp[ i ][ j-1 ] ); 30 } 31 //if( dp[ i ][ j ] > ans ) ans = dp[ i ][ j ]; 32 } 33 } 34 35 cout<<dp[ len1 ][ len2 ]<<endl; 36 } 37 return 0; 38 }