动态规划—最长公共子序列问题


Common Subsequence

[ HDU - 1159 ]

A subsequence of a given sequence is the given sequence with some elements (possible none) left 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 subsequence of 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

题解

输入两个串s,t, 设dp(i,j)表示: s的左边i个字符形成的子串,与t左边的j个 字符形成的子串的最长公共子序列的长度(i,j从0 开始算)
dp(i,j) 就是本题的“状态”
假定 len1 = strlen(s),len2 = strlen(t)
那么题目就是要求 dp[len1,len2]

显然:
dp(n,0) = 0 ( n= 0…len1)
dp(0,n) = 0 ( n= 0…len2)

递推公式:
if ( s[i-1] == t[j-1] ) //s的最左边字符是s1[0]
 dp(i,j) = dp(i-1,j-1) + 1;
else
 dp(i,j) = max(dp(i,j-1), dp(i-1,j) );

时间复杂度O(mn) m,n是两个字串长度


#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;char s[1005], t[1005];
int dp[1010][1010];int main(void)
{while(~scanf("%s%s" ,s ,t)){int len1 = strlen(s);int len2 = strlen(t);for (int i = 0; i <= len1; i++)dp[i][0] = 0;for (int i = 0; i <= len2; i++)dp[0][i] = 0;for (int i = 0; i < len1; i++){for (int j = 0; j < len2; j++){if(s[i]==t[j])dp[i + 1][j + 1] = dp[i][j] + 1;elsedp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);}}cout << dp[len1][len2] << endl;}return 0;
}

动态规划—最长公共子序列问题 HDU-1159 Common Subsequence相关推荐

  1. 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)...

    2019独角兽企业重金招聘Python工程师标准>>> 问题描述:序列X={x1,x2,-,xn},Y={y1,y2,-,yn},当Z={z1,z2-,zn}是X的严格递增下标顺序( ...

  2. 详解动态规划最长公共子序列--JavaScript实现

    前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...

  3. 动态规划1--最长公共子序列

    动态规划1--最长公共子序列 一.动态规划 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地采用把大问题分解成子问题,并 综合子问题的解导出大问题的解的方法,问题求解耗时 ...

  4. 最长公共子序列php,动态规划(最长公共子序列LCS)

    概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...

  5. 最长公共子序列动态规划c语言,动态规划----最长公共子序列(C++实现)

    最长公共子序列 题目描述:给定两个字符串s1 s2 - sn和t1 t2 - tm .求出这两个字符串的最长公共子序列的长度.字符串s1 s2 - sn的子序列指可以表示为 - { i1 < i ...

  6. 动态规划--最长公共子序列

    1. 子序列 摘自维基百科 在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置而形成的新序列. 例如: 令 为一序列 那么,以下序列 是 的子序列之一.对应定义里的自然数 ...

  7. 动态规划——最长公共子序列(LCS)

    最长公共子序列的问题描述为: 下面介绍动态规划的做法. 令 dp[i][j] 表示字符串 A 的 i 号位与字符串 B 的 j 号位之前的 LCS 长度(下标从 1 开始),如 dp[4][5] 表示 ...

  8. 算法导论之动态规划(最长公共子序列和最优二叉查找树)

    动态规划师通过组合子问题的解而解决整个问题,将问题划分成子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解.和分治算法思想一致,不同的是分治算法适合独立的子问题,而对于非独立的子问题,即各 ...

  9. 动态规划—最长公共子序列

    问题描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度.比如:text1 = "abcde", text2 = "ace" ...

最新文章

  1. HDU1548:A strange lift(Dijkstra或BFS)
  2. 阿里巴巴开源技术汇总:115个软件(一)
  3. 基于STM32对于三轴机械臂控制器设计
  4. VC++ 使用导入位图创建工具栏
  5. mui 与jquery 同时使用,$冲突解决办法。
  6. 怎么做数据可视化大屏?从设计到上线,一般用这3类工具
  7. Mysql逻辑架构简介
  8. LoadRunner9 5新特性
  9. 关于Myeclipse自带JDK与本机安装JDK的的区别
  10. AR软件开发一个要多少钱?分享AR内容制作市价
  11. 2020Java后端开发面试题总结(春招+秋招+社招)
  12. [ECCV2018]Generating 3D faces using Convolutional Mesh Autoencoders
  13. SSD固态硬盘:掉盘的四大类原因
  14. 狗民网:狗与爱的世界
  15. Java萌新入门的第一篇文章
  16. 用计算机绘画教学反思,《电脑美术》教学反思范文
  17. Unity编译器下载网址!!
  18. “书”送未来|敏涵控股集团向夏邑一中捐赠图书
  19. collection集合 厂家_一篇搞定Java集合类原理-WEB资讯专栏-DMOZ中文网站分类目录
  20. java 图片 白边_java 去除图片白边 两种方法的比较

热门文章

  1. java Apache Commons jar包简介
  2. (11)Xamarin.iOS - 新增iPhone storyboard
  3. redis配置开机启动
  4. jQuery学习笔记一
  5. 一项横断面人群研究中比较放射学阴性的中轴脊柱关节炎患者与强制性脊柱炎患者之间的差别...
  6. TWAIN Specification Chapter 4 “Advanced Application Implementation”译——应用程序端的高级实现...
  7. 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
  8. 私有链的特点简单介绍
  9. dma工作时cpu工不工作_CPU如何工作?
  10. react 错误边界_React with GraphQL和错误边界中的自定义错误页面