poj 1458 最长公共子序列
Posted ZZUGPY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1458 最长公共子序列相关的知识,希望对你有一定的参考价值。
题意:求两个字符串的最长公共子序列的长度
解题思路:
状态方程:
if(i == 0 || j == 0) dp[i,j] = 0
else if(X[i] == Y[j]) dp[i,j] = dp[i-1,j-1] + 1
else dp[i,j] = max(dp[i-1,j],dp[i,j-1])
#include<iostream> #include<string> #include<cmath> using namespace std; const int MAXN = 500; int dp[MAXN][MAXN] = {0};//某子串长度为0的情况就包括在内; int main() { string str1,str2; int len1,len2; while(cin>>str1>>str2) { len1 = str1.length(); len2 = str2.length(); for(int i = 1;i<=len1;i++) for(int 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] = max(dp[i-1][j],dp[i][j-1]); } cout<<dp[len1][len2]<<endl; } return 0; }
以上是关于poj 1458 最长公共子序列的主要内容,如果未能解决你的问题,请参考以下文章
POJ 1458 Common Subsequence 最长公共子序列
POJ - 1458 Common Subsequence (LCS最长公共子序列)
POJ 1458 Common Subsequence 最长公共子序列 LCS