HDOJ 1159
2014-04-30 18:38
351 查看
思路:dp[i][j]表示str1的第i-1个字符和str2的第j-1个字符的最大的LCS,str[i-1] == str[j-1]时,dp[i][j] = dp[i-1][j-1] + 1 ; else : dp[i-1][j-1] = max(dp[i-1][j],dp[i][j-1]) .
#include<iostream> #include<cstdio> #include<string> #include<cstring> using namespace std; string str1, str2; int dp[2005][2005]; int main(){ /* freopen("in.c", "r", stdin); */ while(cin >> str1 >> str2){ memset(dp, 0, sizeof(dp)); for(int i = 1;i <= str1.size();i ++){ for(int j = 1;j <= str2.size();j ++){ if(str1[i-1] == str2[j-1]) dp[i][j] = dp[i-1][j-1] + 1; else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } } printf("%d\n", dp[str1.size()][str2.size()]); str1.clear(), str2.clear(); } return 0; }