Common Subsequence(最长公共子序列DP)
2015-08-02 14:13
483 查看
题意简述:求两个字符串的最长公共子序列的长度
思路:最经典的最长公共子序列的长度(LCS问题)。动态转移方程如下:字符串X和字符串Y,dp[i][j]表示的是X的前i个字符和Y的前j个字符的最长公共子序列长度。如果
X[i]==Y[j],那么新的LCS+1;如果X[i]!=Y[j],则分别考察dp[i-1][j],和dp[i][j-1],区较大者即可。
思路:最经典的最长公共子序列的长度(LCS问题)。动态转移方程如下:字符串X和字符串Y,dp[i][j]表示的是X的前i个字符和Y的前j个字符的最长公共子序列长度。如果
X[i]==Y[j],那么新的LCS+1;如果X[i]!=Y[j],则分别考察dp[i-1][j],和dp[i][j-1],区较大者即可。
#include <iostream> #include <string> #include <cmath> using namespace std; const int MAX=500; int dp[MAX][MAX]={0}; int main() { int len1,len2; string str1,str2; 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; }
相关文章推荐
- 调整UILabel行高间距
- codeforces 566F F. Clique in the Divisibility Graph(dp)
- 常用类库StringBuilder
- 【LeetCode】232 & 225 - Implement Queue using Stacks & Implement Stack using Queues
- 在iOS 8中使用UIAlertController
- 【转】UITableView使用详解
- 洛谷1373 小a和uim之大逃离
- easyui dataGrid接收嵌套JSON
- easyui dialog子窗口关闭父窗口
- android:layout_centerHorizontal="true"和 android:gravity="center_horizontal"什么区别?
- Selenium2学习-026-WebUI自动化实战实例-024-获取页面元素
- uuid (guid)全局唯一标识符
- Android SDK Tools Platform-tools Build-tools
- hdu 5329 Question for the Leader 枚举,划分图为k个联通的子图
- Gym 100570E : Palindrome Query
- IOS开发之UIScrollViewDelegate详解
- iOS 人机交互设计(开发)指南及一些综合知识整合
- Codeforces 558 D. Guess Your Way Out! II
- Selenium2学习-025-WebUI自动化实战实例-023-页面快照截图应用之一 -- 常规截图(全页面)
- 1099. Build A Binary Search Tree (30)