动态规划的本质

动态规划的实质就是:记忆化搜索。

对于要用动态规划进行解决的问题的特点:

  1. 问题具有最优子结构性质:如果问题的最优解包含的子问题的解也是最优的,就称该问题具有最优子结构。
  2. 问题具有子问题重叠性质:再用递归进行自顶向下计算时,每次产生的子问题并不都是新的,可能会存在子问题重复计算,动态规划就可以对每个子问题只计算一次,将结果保存起来,以便高效利用。

再来看一个问题: 最长公共子序列 POJ1458

给出两个字符串,求出这样的一个最长的公共子序列的长度。

思路:MaxLen(i,j) 表示s1的左边i个字符形成的子串,与s2左边的j个字符形成的子串的最长公共子序列的长度。

MaxLen(i, j) 就是本题的“状态”,定义一数组。

题目就是要求MaxLen(strlen(str1),strlen(str2))

代码:

#include <iostream>
#include<string.h>char str1[1000];
char str2[1000];
int MaxStrLen[1000][1000];int max(int a, int b) {if (a > b)return a;elsereturn b;
}int main() {while (cin >> str1 >> str2) {int strLen1 = strlen(str1);int strLen2 = strlen(str2);int tmp;int i, j;for (i = 0; i < strLen1; i++)MaxStrLen[i][0] = 0;for (j = 0; j < strLen2; j++)MaxStrLen[0][j] = 0;for (int i = 1; i <= strLen1; i++) {for (int j = 1; j <= strLen2; j++) {if (str1[i - 1] == str2[j - 1])MaxStrLen[i][j] = MaxStrLen[i - 1][j - 1] + 1;else {MaxStrLen[i][j] = max(MaxStrLen[i][j - 1], MaxStrLen[i - 1][j]);}}}cout << MaxStrLen[strLen1][strLen2] << endl;}
}

[动态规划]最长公共子序列相关推荐

  1. 动态规划解决最长公共子序列

    动态规划解决最长公共子序列 问题描述 给定两个序列,例如 X = "ABCBDAB".Y = "BDCABA",求它们的最长公共子序列的长度. 递归关系 c[i ...

  2. 动态规划解最长公共子序列(LCS)(附详细填表过程)

    目录 相关概念 子序列形式化定义: 公共子序列定义: 最长公共子序列(以下简称LCS): 方法 蛮力法求解最长公共子序列: 动态规划求解最长公共子序列: 分析规律: 做法: 伪代码: 下面演示下c数组 ...

  3. javascript写算法(一) 动态规划:最长公共子序列

    csdn是疯了吗,右下角的广告是一个人站在猪屁股后面打它...看了一下居然是baidu算出来的广告嵌在了iframe里,fixed to viewport,真是够了.最近还频频出现的广告是一个光头男子 ...

  4. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  5. 动态规划解决方案最长公共子序列问题(开启)

     动态规划 常常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地採用把大问题分解成子问题.并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数添加. 为 ...

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

    动态规划算法的基本要素: 1)最优子结构 当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质.问题的最优子结构性质提供了该问题可用动态规划算法求解的最重要线索. 在动态规划算法中,利用 ...

  7. 两个字符串的最长公共子序列长度_【面试】动态规划-之最长公共子序列、最长公共子串问题...

    先来说明下什么是最长公共子序列,什么是是最长公共子串,举一个实际例子,myblogs与belong,最长公共子序列为blog(myblogs, belong),最长公共子串为lo(myblogs, b ...

  8. 实验二 动态规划算法 最长公共子序列问题

    基本题一:最长公共子序列问题 一.实验目的与要求 1.熟悉最长公共子序列问题的算法: 2.初步掌握动态规划算法: 二.实验题 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,z ...

  9. 用动态规划解决最长公共子序列

    要求:最长公共子序列,英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S ...

最新文章

  1. 自己整理的计算机视觉领域稍微容易中的期刊(第一版)
  2. 02.elasticsearch_read_write模型基础
  3. SkyWalking 观测 Service Mesh 技术大公开
  4. 计算机网络基础系列(五)Socket与TCP/IP编程
  5. IDEA 对接口进行快速测试(Create Test)
  6. AIX系统修改用户密码依然无法登录
  7. Navicat Premium 注册机 激活报错
  8. c语言四个人中有一个人是小偷,涛涛学BASIC逻辑判断
  9. 计算机键盘排列方式,电脑上的键盘布局是怎么形成的?
  10. Excel 多个条件同时重复时,自动标红
  11. 苟富贵倒萨忽然他确实
  12. html如何设定页面4秒后自动跳转,js定时三秒后自动跳转页面
  13. TI芯片TMS320DM642开发
  14. 小鸟云产品/服务初体验
  15. 【手机远程连接电脑】【TeamViewer版】
  16. abb机器人负载配置设定_ABB机器人的设置
  17. 基于SSM的仓库管理系统(含完整源码+论文)
  18. android教程 kotlin,Kotlin for Android使用教程(一)
  19. 财务账套数据采集-转换过程
  20. Redhat7/CentOS7 网络配置与管理(nmtui、nmcli、GNOME GUI、ifcfg文件、IP命令)

热门文章

  1. 【LeetCode】345. Reverse Vowels of a String 解题报告
  2. 深度学习笔记(3)——pytorch+TextCNN实现情感分类(外卖数据集)
  3. RecyclerView加载网络图片防止图片错乱问题
  4. 傅里叶变换及其在opencv中图像去噪的实现
  5. uni-app实现联系人右侧索引字母表点击滚动到相应的位置(uni.pageScrollTo(OBJECT))
  6. TCP序列号和确认号
  7. mysql Miscellaneous notes
  8. 计算机云盘不见了,为何重装了电脑,百度云盘里的文件不见了.而手机里还有
  9. [EDI实施案例] 耐世特/Nexteer DESADV报文的业务解读
  10. python爬取看雪论坛的所有主题帖的回复消息