最大子序列和·动态规划分析

题目

给定序列{A1,A2,A3,...,AN}\{A_1,A_2,A_3,...,A_N\}{A1​,A2​,A3​,...,AN​},求该序列的最大子序列和对应的序列

分析

以下将最大子序列和对应的序列简称为最大子序列

设D[N]是序列的最大子序列,设d[N]是序列中必须含有ANA_NAN​并以ANA_NAN​结尾的最大子序列

例:{-1,3,4,-2,7,-20}。D[4]={3, 4},d[4]={3,4,-2}

由D[N]是否含有ANA_NAN​可得
{D[N]=d[N],AN≥0(此时D[N]含有AN)D[N]=D[N−1],AN<0(此时D[N]不含有AN)(1)\left\{\begin{array}{ll} D[N]=d[N],&A_N\ge 0(此时D[N]含有A_N) \\ D[N]=D[N-1],&A_N< 0(此时D[N]不含有A_N) \end{array}\right. \tag 1 {D[N]=d[N],D[N]=D[N−1],​AN​≥0(此时D[N]含有AN​)AN​<0(此时D[N]不含有AN​)​(1)
(1)式可化简为(2)
D[N]=Max(D[N−1],d[N])(2)D[N]=Max(D[N-1],d[N]) \tag 2 D[N]=Max(D[N−1],d[N])(2)
其中Max()是比较两个序列的和并返回最大序列和对应序列的方程

d[N]分析

d[N]是以ANA_NAN​结尾的最大子序列,若d[N-1]的序列和为负数则d[N-1]不可能为d[N]的一部分,由此可得
{d[N]={d[N−1],AN},Sum(d[N−1])≥0d[N]=AN,Sum(d[N−1])<0(3)\left \{ \begin{array}{ll} d[N]=\{d[N-1],A_N\},&Sum(d[N-1])\ge 0 \\ d[N]=A_N,&Sum(d[N-1])< 0 \end{array} \right. \tag 3 {d[N]={d[N−1],AN​},d[N]=AN​,​Sum(d[N−1])≥0Sum(d[N−1])<0​(3)
其中Sum()为计算序列和的函数

(3)式可化简为(4)
d[N]=Max(AN,{d[N−1],AN})(4)d[N]=Max(A_N,\{d[N-1],A_N\}) \tag 4 d[N]=Max(AN​,{d[N−1],AN​})(4)
结合(2)(4)可得
D[N]=Max(D[N−1],Max(AN,{d[N−1],AN}))(5)D[N]=Max(D[N-1],Max(A_N,\{d[N-1],A_N\})) \tag 5 D[N]=Max(D[N−1],Max(AN​,{d[N−1],AN​}))(5)
此时状态D[N]只与上一级状态D[N-1],d[N-1],本级参数ANA_NAN​相关,所以(5)是最大子序列的状态转移方程

有了状态转移方程再去编写实现代码就是很简单的事了

最大子序列和·动态规划分析相关推荐

  1. 【BZOJ2423】最长公共子序列(动态规划)

    [BZOJ2423]最长公共子序列(动态规划) 题面 BZOJ 洛谷 题解 今天考试的时候,神仙出题人\(fdf\)把这道题目作为一个二合一出了出来,我除了orz还是只会orz. 对于如何\(O(n^ ...

  2. 【算法设计与分析】最长公共子序列问题 动态规划算法 超详细

    最长公共子序列问题描述 注意:最长公共子序列不一定是连续序列. 例如:"ASAFAGAHAJAK"与"AAAAAAA"的最长公共子序列为:AAAAAA 公共子序 ...

  3. 最大连续子序列和-动态规划

    题目描述: 给定K个整数的序列{ N1, N2, -, NK },其任意连续子序列可表示为{ Ni, Ni+1, -, Nj },其中 1 <= i <= j <= K.最大连续子序 ...

  4. 算法知识之最长公共子序列问题(动态规划)

    最近朋友让帮做个关于动态规划的最长公共子序列的问题,翻看以前的笔记并完成该题后,顺便写这样一篇文章,希望对大家有所帮助,同时也帮助自己回顾该知识点. 一.最长公共子序列的定义 子序列:若给定序列X={ ...

  5. 最长单调递增子序列_最长递增子序列(动态规划 + 二分搜索)

    题目 给定数组arr,返回arr的最长递增子序列 举例:arr = [2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,8,9] 要求:如果arr的长度为N,请实现时间复杂度为 ...

  6. 蓝桥杯 ADV-202算法提高 最长公共子序列(动态规划)

    问题描述 给定两个字符串,寻找这两个字串之间的最长公共子序列. 输入格式 输入两行,分别包含一个字符串,仅含有小写字母. 输出格式 最长公共子序列的长度. 样例输入 abcdgh aedfhb 样例输 ...

  7. 2017蓝桥杯B组:最长公共子序列(动态规划详解(配图))

    最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和"baabcdadabc", 可以找到的最长的公共子串 ...

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

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

  9. 最长递增子序列 java_最长递增子序列问题---动态规划

    最长递增子序列问题是一个很基本.较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法.由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能 ...

最新文章

  1. rabbitmq 持久化_SpringBootRabbitMQ消息处理持久化问题
  2. 趣学python3(30)-字典
  3. leetcode 283 Move Zeros; 27 Remove Elements; 26 Remove Duplicated from Sorted Array;
  4. Java基础学习总结(146)——开发人员日志实践规范
  5. 1加6投屏_1加6投屏_6月的早餐,1杯牛奶加燕麦,营养健康又美味,饱腹感很强...
  6. TCP/IP源码分析
  7. java的css的块_CSS基础知识(概念、块级元素、行内元素、选择器)
  8. 教材寻找 下载系列1
  9. 逻辑回归:详细建模流程与例子代码
  10. STM32使用外部SRAM扩展内存,自动在SRAM上分配内存空间的方法
  11. 机器学习初探:(十一)主成分分析
  12. 中国银联在线支付接口开发——前台支付
  13. Python 爬虫系列教程一爬取批量百度图片
  14. 微信如何群发消息给所有人?
  15. 仿酒仙网品牌活动动画效果 (鼠标移上 图片平移)
  16. Linux后台开发工具箱
  17. 深入理解计算机系统 第3章 程序的机器级表示
  18. Jquery字符UrlEncode 编码、解码 --C#UrlEncode
  19. 储存过程的优点?缺点?
  20. 安卓逆向从入门到嗝屁之另一道CTF题目

热门文章

  1. # 55. 跳跃游戏
  2. 手术机器人常见骨科手术 TKA UKA HTO
  3. 通达OA 一次升级引发的即时通讯工具不能接收离线信息的血案
  4. 微信、QQ称霸社交,多闪能否上位?
  5. 一种计算两直线交点的方法
  6. 第一章-机器学习简介 深度之眼_吴恩达机器学习作业训练营
  7. C语言 ERROR C2040 ' ' differs in levels of indirection from ' '
  8. Qt/C++编写安防视频监控系统45-图文报表
  9. python find 正则表达式_python正则表达式
  10. 【DevOps】K8s 基础知识