| 
	
	
		
			http://acm.hdu.edu.cn/showproblem.php?pid=1159
 #include<iostream> 
  #include<string> 
  using namespace std; 
  const int M = 1001; 
  char s[M],t[M]; 
  int dp[M][M];//dp[i][j]表示串s的前i个与串t的前j个的最大匹配 
  //int track[M][M];//保存路径 
   /**//* 
  void LCS(int i,int j)//输出公共子串 
  { 
  if(i==0 || j==0) 
  return ; 
  if(track[i][j] == 1) 
  { 
  LCS(i-1,j-1); 
  printf("%c ",s[i-1]); 
  } 
  else if(track[i][j] == 2) 
  LCS(i-1,j); 
  else 
  LCS(i,j-1); 
  } 
  */ 
  int main() 
    { 
  int i,j,lens,lent; 
  while(scanf("%s%s",s,t)!=EOF) 
     { 
  lens = strlen(s); 
  lent = strlen(t); 
  
  for(i=0;i<=lens;i++) 
  dp[i][0] = 0; 
  
  for(i=0;i<=lent;i++) 
  dp[0][i] = 0; 
  
  for(i=1;i<=lens;i++) 
     { 
  for(j=1;j<=lent;j++) 
     { 
  if(s[i-1] == t[j-1]) 
     { 
  dp[i][j] = dp[i-1][j-1] + 1; 
  //track[i][j] = 1; 
  } 
  else if(dp[i][j-1] > dp[i-1][j]) 
     { 
  dp[i][j] = dp[i][j-1]; 
  //track[i][j] = 3; 
  } 
  else 
     { 
  dp[i][j] = dp[i-1][j]; 
  //track[i][j] = 2; 
  } 
  } 
  } 
  cout<<dp[lens][lent]<<endl; 
  //LCS(lens,lent); 
  //cout<<endl; 
  } 
  return 0; 
  }     
	    
    
 |