一、题目

给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。

二、解题思路

动态规划解题思路可详见另一篇文章。

①定义状态

为了简单起见,我们可以定义dp[i]来表示以a[i]作为末尾的连续序列之和。其中数组a[]表示整数的序列。所以我们求的连续子序中元素和最大的一个数是数组dp中的最大数。

②定义状态转移方程

大家知道动态规划满足无后向性,即:每个阶段的决策仅受之前决策的影响,但是不影响之后各阶段的决策。所以我们可以从后往前推出状态转移方程,我们可以考虑dp[i]与dp[i-1]的关系,设连续序列中的元素保存在数组a[]中,是否一定dp[i] = dp[i-1] +a[i]?答案是不一定的,我们考虑一下只有dp[i-1] + a[i] > a[i]时才可能有dp[i] = dp[i-1] +a[i]等式成立,否则dp[i]可以从a[i]重新算起,这样我们可以得到状态转移方程:

dp[i] = max(dp[i-1] + a[i] , a[i])

从公式中我们可以看出为什么dp[i]来表示以a[i]作为末尾的连续序列之和。

③确定边界

由状态定义我们可以得出当i = 0时,dp[0] = 0;

三、代码编写

#include <stdio.h>
#include <stdlib.h>#define N 7
#define max(a,b) ((a>b)?a:b)int main()
{int a[N] = {0,-2,11,-4,13,-5,-2};//保存最大连续子序列之和int maxResult = 0;//dp[i]来表示以a[i]作为末尾的连续序列之和int dp[N]={0};//核心算法int i=1;for(i;i < N;i++){dp[i] = max((dp[i-1]+a[i]),a[i]);if(maxResult < dp[i]){maxResult = dp[i];}}printf("最大连续子序列之和:%d ",maxResult);return 0;
}

四、运行结果

五、总结

动态规划需要满足无后向性,可用逆向思维推出状态转化方程,动态规划解题方法可详见另一篇文章。

动态规划经典题目——最大连续子序列之和相关推荐

  1. 动态规划经典题目——最大子矩阵和

    一.题目 题目描述:现给出一个N*N矩阵,要求求出拥有最大和的子矩阵的和.例子如下图所示: 它的最大子矩阵的和为15: 二.解题思路 此题的解法与动态规划经典题目--最大连续子序列之和题目思想一样,只 ...

  2. 动态规划经典题目整理

    动态规划经典题目整理 背包问题 最长公共子串问题 连续数组最大和问题 持续增加中.... 背包问题 复杂度 O(nW)O(nW)O(nW) nnn为物品种类,WWW是背包的重量 目的:使得背包中的物品 ...

  3. 动态规划经典题目-数据压缩之图像压缩

    文章目录 一.题目描述 二.解题思路 1. 定义状态 2. 定义状态转移方程 3. 初始化 4. 计算方式 三.代码实现 四.执行结果 五.思考 一.题目描述 ​ 计算机中的图像由一系列像点构成,每个 ...

  4. 动态规划经典题目_动态规划经典题目:鸡蛋掉落(附视频讲解)

    题目: 思路: 先放上视频讲解 动态规划经典题目:鸡蛋掉落https://www.zhihu.com/video/1225199247848513536 纠正:视频里的状态转移方程漏写了一个+1,意思 ...

  5. 动态规划经典题目-最小权三角剖分

    文章目录 一.题目描述 二.解题思路 1. 定义状态 2. 定义状态转移方程 3. 初始化 4. 计算方式 三.代码实现 四.执行结果 五.思考 一.题目描述 设A是顶点为0,1,-,n-1的n凸多边 ...

  6. 最大连续子序列和:动态规划经典题目

    [题目] 给定k个整数的序列{N1,N2,...,Nk },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= k.最大连续子序列 ...

  7. 动态规划经典题目:最大连续子序列和、最大不连续子序列和

    1.最大连续子序列和:  记数组为nums 思路: 记录dp[i]为i位置结尾的最大连续子序列和 则有dp[i]=dp[i-1]>0?(dp[i-1]+nums[i]):nums[i]; 然后求 ...

  8. 动态规划经典题目汇总

    http://www.cppblog.com/doer-xee/archive/2009/12/05/102629.html 转载之前先Orz一下: [s:19] Robberies http://a ...

  9. poj动态规划经典题目

    列表一:经典题目题号: 容易: 1018, 1050, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1 ...

最新文章

  1. torch_{geometric/scatter}中一些函数的用法(softmax,scatter)
  2. OpenSceneGraph 笔记--如何导出三角形数据
  3. 枚举类的使用-使用实例域来替代序数
  4. python读取文件with open_python 文件读写操作open和with的用法
  5. B站开源自研动漫超分辨率模型,助力动漫UGC视频高清化
  6. sparksql自定义函数
  7. 怎么使用小爱同学音响_智能音响购买指南!!!
  8. LeetCode MySQL刷题——day2
  9. linux 卸载skype,如何将Skype与Ubuntu Unity集成 | MOS86
  10. 运用大数据分析开展主动服务
  11. linux 程序员字体下载,编程字体Monaco字体 For Linux版
  12. Android(kotlin)使用距离传感器实现自动息屏亮屏,仿手机通话
  13. PHP实现对微信支付v3版本的订单查询
  14. 阿里云共享型云服务器与独享型云服务器有什么区别?如何选择?
  15. FPGA 中的有符号数乘法
  16. Lesson 49 At the butcher's
  17. 用python手刃Leetcode(1):两数之和【简单题】
  18. 异常值识别和缺失值处理
  19. PostgreSQL 基础模块---缓冲池管理
  20. 基于51单片机的霓虹灯c语言,基于单片机控制的霓虹灯控制器056

热门文章

  1. show() showdialog()区别
  2. 为何“迷你本”退货率很高?
  3. 跨境电商日本市场再创纪录,亚马逊失去流量第一位置
  4. python 适合做什么生意好_上班族副业做什么好?这10个总有一个让你赚到钱
  5. 利用微软产品行业解决方案,小蚁科技追求伟大梦想
  6. 为什么成年人总是有抹不去的故乡情结?
  7. 技嘉固件组件可被滥用为后门,影响700万台设备,易触发供应链攻击
  8. 常见的4种类行为模式
  9. 手机通讯录联系人恢复?没有备份的你需要知道
  10. HikariCP - no suitable driver error