1. 问题描述:

输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。注意: 子序列的长度至少是 1。

输入格式

第一行输入两个整数 n,m。第二行输入 n 个数,代表长度为 n 的整数序列。同一行数之间用空格隔开。

输出格式

输出一个整数,代表该序列的最大子序和。

数据范围

1 ≤ n,m ≤ 300000

输入样例:

6 4
1 -3 5 1 -2 3

输出样例:

7
来源:https://www.acwing.com/problem/content/description/137/

2. 思路分析:

分析题目可以知道我们需要求解一段长度小于等于m的区间和,并且这一段区间在所有长度小于等于m的区间中的区间和是最大的,所以这是一个最优化的问题,我们可以枚举以i为右端点,在左边找一个长度小于等于m的左端点使得区间和是最大的,枚举所有的左端点那么一定可以找到一个长度小于等于m的区间和是最大的,在枚举右端点的过程中其实是维护一个长度小于等于m的区间所以可以使用单调队列来优化(本质上是求解长度的m的滑动窗口的最值问题==>单调队列优化),在队列中维护一个单调递增的队列即可,可以先预处理前缀和然后在枚举右端点的时候维护最小的前缀和信息即可,队头元素就是区间和最小的位置。

3. 代码如下:

if __name__ == "__main__":n, m = map(int, input().split())w = list(map(int, input().split()))s = [0]# 预处理前缀和for i in range(1, n + 1):s.append(s[-1] + w[i - 1])q = [0] * (n + 1)# 一开始的时候s[0]为队列中的一个元素所以tt = 0hh, tt = 0, 0res = -10 ** 9for i in range(1, n + 1):# 不包含第i个位置(通过画图来确定边界)if hh <= tt and q[hh] < i - m: hh += 1# 更新答案: 当前位置的前缀和减去最小的前缀和那么得到的就是以当前位置结尾的前缀和的最大值res = max(res, s[i] - s[q[hh]])# 单调队列维护窗口长度小于等于m的最小前缀和的位置while hh <= tt and s[q[tt]] >= s[i]: tt -= 1tt += 1q[tt] = iprint(res)

135 最大子序和(单调队列优化)相关推荐

  1. AcWing 135. 最大子序和(单调队列优化 dp)

    思路 这题与普通的最大子段和不同,这题的最大子段和的长度不超过:m, 我们设 fif_ifi​ 表示 i 结尾的最大子段和,那么:fi=Max(sumi−sumj),(1<=i−j<=m) ...

  2. AcWing135.最大子序和(单调队列DP)

    题目传送门 输入一个长度为n的整数序列,从中找出一段长度不超过m的连续子序列,使得子序列中所有数的和最大. 注意: 子序列的长度至少是1. 输入格式 第一行输入两个整数n,m. 第二行输入n个数,代表 ...

  3. tyvj1305 最大子序和 【单调队列优化dp】

    描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7 当m=2或m=3时,S=5+1=6 输 ...

  4. 【Tyvj - 1305】最大子序和(单调队列优化dp)

    题干: 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7 当m=2或m=3时,S=5+1=6 ...

  5. Acwing -- 单调队列优化的DP问题

    文章目录 引入 acwing154 滑动窗口 应用 135 最大子序和 1088.旅行问题 AcWing 1087. 修剪草坪28 AcWing 1089. 烽火传递 AcWing 1090. 绿色通 ...

  6. 单调队列优化的DP问题

    概述 单调队列就是通过排除求最值时候的冗余,从而是队列具有性质,可以方便求解问题. DP的两个阶段: 朴素DP的基本原理--闫氏DP分析法 对朴素DP进行优化 闫氏DP分析法的拓展 :在一个有限的集合 ...

  7. 单调队列优化DP 上 day46

    我超 好jian的t宝 今天也没有看到jls登顶www 一些小理解:dp就是用集合来概括 这样就可以用递推的方式来最优解优化 而dp的状态自然千奇百怪 可谓条条大路 AcWing 135. 最大子序和 ...

  8. [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)

    4182: Shopping Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 374  Solved: 130 [Submit][Status][Di ...

  9. 浅谈单调队列优化的DP

    为什么都是浅谈?深入就掉坑啊,掉坑就要填坑啊,填坑就会发现又挖了更多的坑啊,然后恶性循环啊. 这个坑必须要填的,拖了这么久了. 先拿TYVJ 1305来说吧,此题具体的题面没找到,代码简单的对拍了一下 ...

最新文章

  1. 得到windows聚焦图片(windows 10)
  2. php el表达式,JSP EL表达式学习
  3. 洛谷 [P1024]一元三次方程求解【二分答案】
  4. Android CardView卡片布局 标签: 控件
  5. java json 解析null_解析包含null的原始json数组
  6. 数据结构之顺序表(一)
  7. python selenium-9 grid模式
  8. mysql链接丢失_mysql 连接丢失错误解决(转载)
  9. 《深入理解Linux内核》条目式笔记 _2
  10. 不想remote的程序员跟咸鱼有什么区别?
  11. Linux 命令(2)—— od 命令
  12. plsql导出表结构到excel_plsql基本操作 复制表 导出表 导出表结构 及其导入
  13. 电脑用户计算机名文件夹,电脑用户名文件夹名称更改
  14. java 图片格式判断_Java判断文件是否为图片
  15. python duplicated函数_16、pandas的duplicated和drop_duplicaates函数
  16. android 模拟器手机如何添加文件到sd卡?
  17. [ 物联网篇 ] 27 -使用libcur API 实现本地时间同步的功能,类似NTP功能
  18. HC-05蓝牙模块与STM32控制led灯亮详解
  19. iOS新特性框架、仿微信图片浏览、视频监控、爱心动画、文字适配等源码
  20. python是一种蟒蛇使用的语言_python树莓派系列教程一:初识大蟒蛇 python(python语言环境搭建篇)...

热门文章

  1. 干柠檬片的作用(收藏)
  2. 对于新买的电脑都需要干什么呢?
  3. c# messageBox.show()应用
  4. WPF方便的调用FarPoint
  5. 如何使用photoshop将论文数据图中的英文变成中文
  6. 0715-铁矿石跌10%
  7. jsoup之下载图片和小说
  8. android手势第一次设置密码_[Android开发实战]Android手势密码(支付宝手势密码)实现(支持2.x) | 学步园...
  9. 【满分】【华为OD机试真题2023 JAVAJS】基站维修工程师
  10. websocket java详解_WebSocket详解