Common Subsequence 动态规划I
来源:互联网 发布:网络主播行业调查分析 编辑:程序博客网 时间:2024/06/05 05:30
roblem Description
out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk> is a subsequence of
X if there exists a strictly increasing sequence <i1, i2, ..., ik> of indices of X such that for all j = 1,2,...,k,
xij = zj.For example, Z = <a, b, f, c> is a subsequenceof X = <a, b, c, f, b, c> with index sequence<1, 2,
4, 6>. Given two sequences X and Y the problem is to find the length of the maximum-length common
subsequence of X and Y. The program input is from a text file. Each data set in the file contains two
strings representing the given sequences. The sequences are separated by any number of white spaces.
The input data are correct. For each set of data the program prints on the standard output the length of the
maximum-length common subsequence from the beginning of a separate line.
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4
2
0
Source
Southeastern Europe 2003
Recommend
Ignatius
题意:对于母串X=<x1,x2,......,xm>, Y=<y1,y2,......,yn>,求最长公共子串。
思路:用二维数组dp[i][j]记录串x1x2......xi与y1y2......yj的能得到最长公共子串,则可得到状态转移方程
当a[i] == a[j] 时 dp[i][j] = dp[i-1][j-1] + 1;
否则 dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
#include<iostream>#include<cstring>#include<string.h>#include<algorithm>//max()的函数const int N = 1000 + 24;char a[N], b[N];int dp[N][N];using namespace std;int main(){#ifdef CDZSC_OFFLINE;freopen("in.txt", "r", "stbin");#endif;while (scanf("%s %s", a + 1, b + 1) != EOF)//注意此处输入前是%s,当输入字符串数组时前为%s,a+1,b+1 表示输入的数组从第二项(1)开始标志,是为了下面从1开始循环方便{int i, j;memset(dp, 0, sizeof(dp));int len1 = strlen(a + 1);//计算字符串的长度int len2 = strlen(b + 1);for (i = 1; i <= len1; i++)//此处的思想是将数组a中的每个元素逐次和数组b比较for (j = 1; j <= len2; j++){if (a[i] == b[j])//如果a中的第i个元素等于b中的第j个元素dp[i][j] = dp[i - 1][j - 1] + 1;//dp[i][j]左上方那个数+1,然后动态转移elsedp[i][j] = max(dp[i][j-1], dp[i - 1][j]);//选出dp[i][j]左侧或者上面最大的那个值动态转移}printf("%d\n", dp[len1][len2]);//数组二维数组最后一个元素的值}}
- Common Subsequence 动态规划I
- 动态规划 Common Subsequence
- 【动态规划】poj1458 common subsequence
- POJ1458 Common Subsequence 动态规划
- Hdu1159 - Common Subsequence - 动态规划
- HDU1159 Common Subsequence(动态规划)
- poj1458 Common Subsequence 动态规划
- HDU_1159 Common Subsequence 【动态规划】
- POJ 1458-Common Subsequence (动态规划)
- 【poj1458】Common Subsequence || nyoj36 (动态规划)
- HDU 1159 Common Subsequence (动态规划LCS)
- hdu 1159 Common Subsequence (动态规划)
- hdu 1159 Common Subsequence(动态规划)
- hdu 1059 Common Subsequence动态规划
- [动态规划]UVA10405 - Longest Common Subsequence
- hdu 1159 Common Subsequence 动态规划
- poj 动态规划DP - 1458 Common Subsequence
- HDU 1159 Common Subsequence(动态规划)
- openGL中使用混合数组(glInterLeavedArrays)
- Python文件操作
- Spinner下拉列表【Android】
- 项目搭建
- unity sqlite数据库(一)
- Common Subsequence 动态规划I
- 表单行号自动生成
- 题目448 寻找最大数
- 并发应用程序
- 【嵌入式开发】树莓派h264实时视频监控
- jQuery 提供了多种遍历 DOM 的方法。 遍历方法中最大的种类是树遍历(tree-traversal)。jQuery 提供了多种遍历 DOM 的方法。 遍历方法中最大的种类是树遍历(tree-t
- 练习场acm 题目663 弟弟的作业
- NOI2016游记
- 杭电 1002-大数相加