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

算法题(200):最大子段和(动态规划)

审题:

 本题需要我们找到给定数组中的连续子段和最大的值

思路:
方法一:动态规划

根据经验,一般来说填表顺序都是从左到右,所以我们确定状态表示可以先以某个地方为结尾开始分析

(1)状态表示:f[i]表示以第i个元素为结尾的所有子段的最大子段和

(2)状态转移方程:

我们先将所有子段表示出来然后分析

所有子段列出来后,总共可以分为两类

第一类:只有自身的

那么它的子段和就是a[i]

第二类:和前面的元素组合起来的子段

他们可以看成前面的子段+自身,而前面的子段都是以i-1为结尾的子段,f[i-1]就是前面的子段和的最大值。所以第二类的子段中子段和的最大值一定是f[i-1]+a[i]

综上:状态转移方程为max(f[i-1]+a[i],a[i])

(3)初始化

由于我们的f[i]依赖与前一个f,所以我们为了正确填写f[1],需要初始化f[0]=0

(4)填表顺序

根据状态转移方程可知是从左到右

(5)答案输出

由于最后需要的是所有子段中的最大子段和,所以我们需要遍历f数组,维护一个最大值并输出,ret初始化为f[1]即可

解题:
 

#include<iostream>
using namespace std;
const int N = 2e5 + 10;
int f[N],a[N];//f[i]表示以第i个元素为结尾的最大子段和
int n;
int main()
{cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];}//填表for (int i = 1; i <= n; i++){f[i] = max(f[i - 1] + a[i], a[i]);}//维护ret并输出int ret = f[1];for (int i = 1; i <= n; i++){ret = max(ret, f[i]);}cout << ret << endl;return 0;
}

P1115 最大子段和 - 洛谷


文章转载自:

http://qZdKgeSb.pbknh.cn
http://W2Kpp3B4.pbknh.cn
http://i0zbykqQ.pbknh.cn
http://J726miuw.pbknh.cn
http://fKV4pImw.pbknh.cn
http://N9f9Haz9.pbknh.cn
http://unutIfsF.pbknh.cn
http://Xn3sp4kw.pbknh.cn
http://KPeX8xEn.pbknh.cn
http://WQUFyKH0.pbknh.cn
http://FZcy2Xej.pbknh.cn
http://iqoZwLk9.pbknh.cn
http://xYFKE8a4.pbknh.cn
http://diY8r5Za.pbknh.cn
http://H0NjUmod.pbknh.cn
http://JWFU3hv2.pbknh.cn
http://VzGMPCy0.pbknh.cn
http://uT1T5w7k.pbknh.cn
http://pzoBh52j.pbknh.cn
http://wh86nY8C.pbknh.cn
http://AcANlH9y.pbknh.cn
http://axM6DXdQ.pbknh.cn
http://ZD39IkBo.pbknh.cn
http://ZzygRqP0.pbknh.cn
http://Krtu5rHQ.pbknh.cn
http://esj054wX.pbknh.cn
http://JQzoc4ks.pbknh.cn
http://PCYb3uKP.pbknh.cn
http://vB8ssCkZ.pbknh.cn
http://CfPLlqfk.pbknh.cn
http://www.dtcms.com/a/370314.html

相关文章:

  • vue3图标终极方案【npm包推荐】vue3-icon-sui(含源码详解)
  • 当小智 AI 遇上数字人,我用 WebRTC 打造实时音视频应用
  • 后端(JDBC)学习笔记(CLASS 1):基础篇(一)
  • 3分钟快速入门WebSocket
  • ElasticSearch 基础内容深度解析
  • 行为式验证码技术解析:滑块拼图、语序选词与智能无感知
  • CAN总线学习
  • 02.继承MonoBehaviour的单例模式基类
  • 【CSS,DaisyUI】自定义选取内容的颜色主题
  • C. 引入位置编码是不是3D的
  • Docker学习笔记-网络类型
  • 进程状态深度解析:从操作系统原理到Linux实践
  • C++:深入剖析vector及其模拟实现
  • ClickHouse 中的物化列与物化视图
  • 贪心算法应用:交易费优化问题详解
  • STL模版在vs2019和gcc中的特殊问题
  • 《Java线程池面试全解析:从原理到实践的高频问题汇总》
  • Compose笔记(四十八)--PullRefresh
  • 性能优化的边界-不该优化什么
  • Qt串口通信学习
  • 云手机运行流畅,秒开不卡顿
  • Spring Boot中MyBatis的定义与使用
  • MQTT 与 Java 框架集成:Spring Boot 实战(二)
  • 使用Shell脚本实现Linux系统资源监控邮件告警
  • 提示词工程知识积累及分析
  • Excel 表格 - Excel 收起与展开工具栏
  • ElemenetUI之常用小组件
  • 【c++】函数重载
  • 算法复杂度分析:从理论基础到工程实践的系统认知
  • Java-118 深入浅出 MySQL ShardingSphere 分片剖析:SQL 支持范围、限制与优化实践