当前位置: 首页 > article >正文

最大子数组和 最大子数组和(有长度限制) 最大m段子数组和

1.最大子数组和

可以用dp求解,只需要维护一个sum表示目前为止的最大子数组,遇到num[i]时若sum > 0则sum可以继续作为子数组更新sum为sum + num[i]否则sum更新为num[i]

2.最大子数组和(有长度限制)

135. 最大子序和 - AcWing题库

要求长度不超过m的子数组,首先求出原数组的前缀和s,这个时候考虑dp就可以得到式子dp[i] = max(s[i] - s[j])(i - m <= j < i),因此我们需要用单调队列优化dp,我们维护一个单调队列储存数组下标使得队头元素距离i的距离小于等于m,这个单调队列是递增的因此我们要令si减去最小的sj这里的j也就是我们的队头的下标,因此我们替换队列元素的时候只要s[i]小于等于s[q[tt]]那么就弹出队尾、

3.最大m段子数组和

4546. 最大和加强加强版 - AcWing题库

一个经典的状态机模型,我们开一个dp[i][j][k]表示第i个数在第j段子数组是否被使用

若第i个数不被使用则dp[i][j][0] = max(dp[i - 1][j][0] , dp[i - 1][j][1]),之所以不考虑i - 1被划入j - 1是因为此时我们在考虑i在第j段的时候,并且此时i是不被使用的也就是说若i - 1在j - 1段而i又不被使用那么此时是不存在第j段的

若第i个数被使用则dp[i][j][1] = max(dp[i - 1][j][1](前i - 1个数凑出j段) , max(dp[i - 1][j - 1][0] , dp[i - 1][j - 1][1])这里考虑i - 1在第j段的时候之所以不考虑i - 1不被使用的情况是因为若i - 1在第j段却不被使用那么i就只能在j + 1段

因为发现每次转移只与i - 1有关因此可以用滚动数组优化空间


http://www.kler.cn/a/444918.html

相关文章:

  • 使用Python实现量子通信模拟:探索安全通信的未来
  • 前端小白学习之路-Vben探索 vite 配置 - 1/50
  • 【进程篇】操作系统
  • 【系统】Mac crontab 无法退出编辑模式问题
  • Python 爬取网页文字并保存为 txt 文件教程
  • WebPlotDigitizer 使用指南
  • windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器
  • 【NVIDIA】启动ubuntu后显卡驱动丢失
  • esp8266_TFTST7735语音识别UI界面虚拟小助手
  • 信号处理相关的东东(学习解惑)
  • 高浓度盐酸除铁的详细介绍
  • mlr3超参数Hyperparameter 自动寻找auto
  • 9_HTML5 SVG (5) --[HTML5 API 学习之旅]
  • 详解ROS环境配置:setup.bash 文件的功能与操作
  • Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
  • 8K+Red+Raw+ProRes422分享5个影视级视频素材网站
  • mysql同一张表中数据一样的问题和解决
  • 远程桌面连接
  • vue create 创建项目 提示 Failed to check for updates 淘宝 NPM 镜像站喊你切换新域名啦
  • 如何测量分辨率
  • Java8 Stream编码问题
  • 【HTML】动态闪烁圣诞树+雪花+音效
  • 教育版idea及jetbrains全家桶免费使用
  • 七、网络安全-企业数据脱敏
  • 【YOLO】 YOLOv3原理
  • 深入解析 Vue 3 源码:原理与学习指南