思路

  1. 这题与普通的最大子段和不同,这题的最大子段和的长度不超过:m,
  2. 我们设 fif_ifi​ 表示 i 结尾的最大子段和,那么:fi=Max(sumi−sumj),(1<=i−j<=m)f_i=Max(sum_i-sum_j),(1<=i-j<=m)fi​=Max(sumi​−sumj​),(1<=i−j<=m)
  3. 观察当我们在枚举第 i 个位置的时候:sumisum_isumi​ 是变量,所有我们将sumisum_isumi​ 从上面的式子提出来,那么原式变成:fi=sumi−Min(sumj),(1<=i−j<=m)f_i=sum_i-Min(sum_j),(1<=i-j<=m)fi​=sumi​−Min(sumj​),(1<=i−j<=m),
  4. 而 Min(sumj)Min(sum_j)Min(sumj​) 是可以用单调队列的优化的。

代码

#include <bits/stdc++.h>
using namespace std;
#define db  double
#define ll  long long
#define Pir pair<int, int>
#define fi  first
#define se  second
#define pb  push_back
#define m_p make_pair
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
/*==========ACMer===========*/
const int N = 300005;
int n, m;
int a[N], tt, hh;
ll sm[N], q[N];int main()
{scanf("%d %d", &n, &m);for (int i = 1; i <= n; i ++) {scanf("%d", &a[i]);sm[i] = sm[i - 1] + a[i];}ll ans = -INF;hh = 0, tt = -1;q[++ tt] = 0;for (int i = 1; i <= n; i ++) {if (tt >= hh && i - q[hh] > m) hh ++;while (tt >= hh && sm[q[tt]] >= sm[i]) tt --;ans = max(ans, sm[i] - sm[q[hh]]);q[++ tt] = i;}printf("%lld\n", ans);return 0;
}

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

  1. 单调队列优化DP 上 day46

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

  2. Acwing 135 最大子序和

    Acwing 135 最大子序和 题目: 输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大. 题解: 我们把这个问题的集合分成n份,第k份表示以A[ ...

  3. AcWing 1089 烽火传递 题解(动态规划—DP—单调队列优化DP)

    AcWing 1089 烽火传递 单调队列优化DP,思路比较简单,维护一个保持元素单调递增的单调队列,队首就是第i座烽火台能接收到的,代价最小的方案,加上第i座烽火台的代价就是这座烽火台的最小值 #i ...

  4. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

  5. poj 2373(单调队列优化dp)

    在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b].要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必 ...

  6. poj 1821(单调队列优化dp)

    题意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到 ...

  7. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  8. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)

    题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...

  9. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

最新文章

  1. 移动通信网络中的数字基带
  2. 如何自学python爬虫-Python初学者如何从网络爬虫到机器学习?
  3. python语音播报库-基于python GUI开发的点名小程序(语音播报)
  4. file_put_contents图片固定大小_创意图片裁剪,神一样的操作
  5. Mylyn 2.0,第 2 部分: 自动上下文管理
  6. java 搜索文件 pdf_Java查找并高亮PDF文本过程解析
  7. HDLBits答案(19)_Verilog有限状态机(6)
  8. Shiro-550反序列化漏洞复现
  9. Discuz常见小问题-如何取消登陆发帖验证码
  10. springboot启动报错Exception in thread “main“ java.lang.NoClassDefFoundError: io/netty/util/Timer
  11. Android断点续传下载器JarvisDownloader
  12. Spring事物配置文件
  13. Android中的Intent详细讲解【转】
  14. LibFewShot:小样本学习与细粒度分类(一) -- 环境部署、相关论文研究
  15. BIM族库下载——塔吊等垂直运输设备族库
  16. 苹果CMSv10首涂第四套自适应视频站正版原创挖片网高级DIY模板
  17. node.js 实现文件上传
  18. autojs 复制到粘贴板_JS复制到剪贴板示例代码
  19. excel公式编辑器_用EXCEL图表制作时钟「内容详细,配有大量动画操作,值得收藏」
  20. python怎么用sin_Python math.sin() 方法

热门文章

  1. 基于elementUI封装了基础表单组件
  2. 对比顺序表与链表——纵观与取舍
  3. 网页webp转非webp的jpg gif png 图片
  4. 研究生浑浑噩噩的一天
  5. SpringMVC+log4j配置
  6. SwiftUI AR教程之RealityKit 中将 AR 内容锚定到面部(教程含源码)
  7. 微信公众号签到,签到后在活动大屏中实时展示签到人信息,也可以导出签到人信息用于抽奖
  8. Ubuntu系统管理 —— 磁盘的初始化及自动挂载
  9. ThinkPhp6+Vue直播平台后台管理系统
  10. 软件开发团队的管理要素