/*
* UVA_10405.cpp
*
* Created on: 2013年12月17日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn = 10005;
string str1,str2;
int dp[maxn][maxn];
int maxx(int a , int b)
{
if(a > b) return a ;
return b ;
}
int main(){
while(getline(cin,str1)){
getline(cin,str2);
// memset(dp,0,sizeof(dp)); 这样写可能会TLE
int len1 = str1.size();
int len2 = str2.size();
int len = maxx(len1,len2);
int i,j;
for(i = 0 ; i <= len ; ++i){//**推荐使用这种初始化方式...
dp[i][0] = 0;
dp[0][i] = 0;
}
for(i = 1 ; i <= len1 ; ++i){
for(j = 1 ; j <= len2 ; ++j){
if(str1[i-1] == str2[j-1]){
dp[i][j] = dp[i-1][j-1] + 1;
}else{
dp[i][j] = maxx(dp[i-1][j],dp[i][j-1]);
}
}
}
printf("%d\n",dp[len1][len2]);
}
return 0;
}
(Relax DP1.6)UVA 10405 Longest Common Subsequence(使用DP来求解最长公共子序列LCS)
最新推荐文章于 2020-06-28 11:00:38 发布