动态规划经典题目——最大连续子序列之和
一、题目
给定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;
}
四、运行结果
五、总结
动态规划需要满足无后向性,可用逆向思维推出状态转化方程,动态规划解题方法可详见另一篇文章。
动态规划经典题目——最大连续子序列之和相关推荐
- 动态规划经典题目——最大子矩阵和
一.题目 题目描述:现给出一个N*N矩阵,要求求出拥有最大和的子矩阵的和.例子如下图所示: 它的最大子矩阵的和为15: 二.解题思路 此题的解法与动态规划经典题目--最大连续子序列之和题目思想一样,只 ...
- 动态规划经典题目整理
动态规划经典题目整理 背包问题 最长公共子串问题 连续数组最大和问题 持续增加中.... 背包问题 复杂度 O(nW)O(nW)O(nW) nnn为物品种类,WWW是背包的重量 目的:使得背包中的物品 ...
- 动态规划经典题目-数据压缩之图像压缩
文章目录 一.题目描述 二.解题思路 1. 定义状态 2. 定义状态转移方程 3. 初始化 4. 计算方式 三.代码实现 四.执行结果 五.思考 一.题目描述 计算机中的图像由一系列像点构成,每个 ...
- 动态规划经典题目_动态规划经典题目:鸡蛋掉落(附视频讲解)
题目: 思路: 先放上视频讲解 动态规划经典题目:鸡蛋掉落https://www.zhihu.com/video/1225199247848513536 纠正:视频里的状态转移方程漏写了一个+1,意思 ...
- 动态规划经典题目-最小权三角剖分
文章目录 一.题目描述 二.解题思路 1. 定义状态 2. 定义状态转移方程 3. 初始化 4. 计算方式 三.代码实现 四.执行结果 五.思考 一.题目描述 设A是顶点为0,1,-,n-1的n凸多边 ...
- 最大连续子序列和:动态规划经典题目
[题目] 给定k个整数的序列{N1,N2,...,Nk },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= k.最大连续子序列 ...
- 动态规划经典题目:最大连续子序列和、最大不连续子序列和
1.最大连续子序列和: 记数组为nums 思路: 记录dp[i]为i位置结尾的最大连续子序列和 则有dp[i]=dp[i-1]>0?(dp[i-1]+nums[i]):nums[i]; 然后求 ...
- 动态规划经典题目汇总
http://www.cppblog.com/doer-xee/archive/2009/12/05/102629.html 转载之前先Orz一下: [s:19] Robberies http://a ...
- poj动态规划经典题目
列表一:经典题目题号: 容易: 1018, 1050, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1 ...
最新文章
- torch_{geometric/scatter}中一些函数的用法(softmax,scatter)
- OpenSceneGraph 笔记--如何导出三角形数据
- 枚举类的使用-使用实例域来替代序数
- python读取文件with open_python 文件读写操作open和with的用法
- B站开源自研动漫超分辨率模型,助力动漫UGC视频高清化
- sparksql自定义函数
- 怎么使用小爱同学音响_智能音响购买指南!!!
- LeetCode MySQL刷题——day2
- linux 卸载skype,如何将Skype与Ubuntu Unity集成 | MOS86
- 运用大数据分析开展主动服务
- linux 程序员字体下载,编程字体Monaco字体 For Linux版
- Android(kotlin)使用距离传感器实现自动息屏亮屏,仿手机通话
- PHP实现对微信支付v3版本的订单查询
- 阿里云共享型云服务器与独享型云服务器有什么区别?如何选择?
- FPGA 中的有符号数乘法
- Lesson 49 At the butcher's
- 用python手刃Leetcode(1):两数之和【简单题】
- 异常值识别和缺失值处理
- PostgreSQL 基础模块---缓冲池管理
- 基于51单片机的霓虹灯c语言,基于单片机控制的霓虹灯控制器056