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

佛山做外贸网站信息大连装修公司

佛山做外贸网站信息,大连装修公司,郑州今晚发布会,网站建设记账做什么科目洛谷P1115 最大子段和 题解 题目描述 最大子段和是一道经典的动态规划问题。题目要求:给定一个包含n个整数的序列,找出其中和最大的连续子序列,并输出该最大和。若所有数均为负数,则取最大的那个数。 输入格式: 第…

洛谷P1115 最大子段和 题解

题目描述

最大子段和是一道经典的动态规划问题。题目要求:给定一个包含n个整数的序列,找出其中和最大的连续子序列,并输出该最大和。若所有数均为负数,则取最大的那个数。

输入格式

  • 第一行一个整数n(1 ≤ n ≤ 2×10⁵)
  • 第二行n个整数a₁,a₂,…,aₙ(-10⁴ ≤ aᵢ ≤ 10⁴)

输出格式

  • 输出一个整数,表示最大子段和

样例输入

5
-2 11 -4 13 -5 -2

样例输出

20

(对应子序列[11,-4,13])

解题思路

1. 动态规划(Kadane算法)

核心思想:维护两个关键变量

  • current_sum:以当前元素结尾的最大子段和
  • max_sum:全局最大子段和

状态转移方程
c u r r e n t _ s u m = { a i if  c u r r e n t _ s u m < 0 c u r r e n t _ s u m + a i otherwise current\_sum = \begin{cases} a_i & \text{if } current\_sum < 0 \\ current\_sum + a_i & \text{otherwise} \end{cases} current_sum={aicurrent_sum+aiif current_sum<0otherwise
m a x _ s u m = max ⁡ ( m a x _ s u m , c u r r e n t _ s u m ) max\_sum = \max(max\_sum, current\_sum) max_sum=max(max_sum,current_sum)

2. 算法流程

  1. 初始化current_sum = 0max_sum = -∞
  2. 遍历数组中的每个元素:
    • 如果current_sum < 0,说明之前累计的和为负数,应舍弃,从当前元素重新开始
    • 否则,将当前元素加入累计和
    • 每次更新全局最大值max_sum
  3. 最终max_sum即为答案

代码解析

#include<bits/stdc++.h>
using namespace std;int main() {long long sum = 0;         // 当前子段和int x;                     // 临时存储输入值int n;cin >> n;// 初始化最大值为最小可能的long long值long long maxx = 0xffffffffffff;maxx *= -1;               // 等价于 LLONG_MINfor (int i = 1; i <= n; ++i) {cin >> x;if (sum > 0) {        // 累计和为正,继续扩展子段sum += x;maxx = max(maxx, sum);} else {              // 累计和为负,重新开始sum = x;maxx = max(maxx, sum);}}cout << maxx;return 0;
}

关键点说明

  1. 初始值设置

    • maxx初始化为0xffffffffffff * -1,等价于-2^48,确保能正确处理全负数情况
    • 更规范的写法是使用#include <climits>中的LLONG_MIN
  2. 决策逻辑

    • sum > 0时,继续累加当前元素可能获得更大和
    • sum ≤ 0时,舍弃之前所有元素,从当前元素重新开始
  3. 时间复杂度:O(n)

    • 仅需一次线性扫描即可完成计算

复杂度分析

指标复杂度说明
时间复杂度O(n)单次遍历数组
空间复杂度O(1)仅使用常数级额外空间

边界情况测试

测试用例预期输出实际输出说明
1 -5-5-5单个负数元素
3 -1 -2 -3-1-1全负数序列
4 1 2 -3 466包含负数的中间最优子段
5 -2 11 -4 13 -5 -22020经典样例

优化方向

  1. 输入优化

    • 使用scanf/printf替代cin/cout可提升IO速度
    • 添加ios::sync_with_stdio(false)加速C++流
  2. 代码简化

    // 简化版代码(功能完全等价)
    #include<bits/stdc++.h>
    using namespace std;
    int main() {int n, x;cin >> n;long long sum = 0, maxx = LLONG_MIN;while(n--) {cin >> x;sum = max((long long)x, sum + x);maxx = max(maxx, sum);}cout << maxx;return 0;
    }
    

总结

本题是动态规划的经典入门题,Kadane算法通过O(n)时间复杂度和O(1)空间复杂度完美解决问题。理解"舍弃负贡献"的核心思想是关键,这种贪心策略在许多序列问题中都有广泛应用。实际编码时需特别注意全负数等边界情况的处理。


文章转载自:

http://KPLEDgaP.pLgbj.cn
http://GpXzxrVI.pLgbj.cn
http://fyHqB1lZ.pLgbj.cn
http://uxkJpOWd.pLgbj.cn
http://OOxWxmlP.pLgbj.cn
http://Og6qYWWR.pLgbj.cn
http://2D6WTM0I.pLgbj.cn
http://f9A0wDd1.pLgbj.cn
http://5FRtPKKC.pLgbj.cn
http://7DdXVLOz.pLgbj.cn
http://dWvC47dV.pLgbj.cn
http://VoLwJeWt.pLgbj.cn
http://h5i43HV9.pLgbj.cn
http://dRcogeZ9.pLgbj.cn
http://ONan3pTN.pLgbj.cn
http://LBrY3FbC.pLgbj.cn
http://bFIw0nOx.pLgbj.cn
http://SlPwkRiJ.pLgbj.cn
http://93j0z6ti.pLgbj.cn
http://e1jVoZsK.pLgbj.cn
http://87UYyNMV.pLgbj.cn
http://n90416tk.pLgbj.cn
http://12qwvVTR.pLgbj.cn
http://jTzgDHpB.pLgbj.cn
http://oDy9On4R.pLgbj.cn
http://HqQnbg1u.pLgbj.cn
http://03TXNTX5.pLgbj.cn
http://lGQNGvII.pLgbj.cn
http://L7wjcv3y.pLgbj.cn
http://FGZAoJLF.pLgbj.cn
http://www.dtcms.com/wzjs/776105.html

相关文章:

  • 企业网站源码asp做国珍新时代 网站
  • 中国国建设监理协会网站什么软件可以搜索关键词精准
  • 番禺网站建设报价制作网站哪家专业
  • 深圳哪里有做网站的宜昌市住房城乡建设网站
  • 平台网站建设的公司滨州市城乡建设部网站首页
  • 广州有哪些做网站的公司餐饮公司注册条件
  • 山东省交通厅建设网站首页wordpress怎么恢复到原来版本
  • 国外网站加速神器付费wordpress
  • 网站三个月没排名怎么形容网站风格
  • 网站建设丽水专做热血电影的网站
  • 网站老提示有风险许昌购物网站开发设计
  • 浙江建设培训考试网站2023推广平台
  • 个人备案网站可以做淘宝客域名 备案号 网站的关系
  • 网站源码上传服务器了怎么做有搜索引擎作弊的网站
  • 宝安网站制作哪里好微擎 网站开发工具
  • 如何做自己的网站或者论坛有没有一种网站做拍卖厂的
  • 电商网站开发思路模版省住房城乡建设厅门户网站
  • 网站官网认证加v怎么做网站建设服务合同需要哪些资料
  • 网站建设的原则师德师风建设好的小学网站
  • 正在建设中的网站可算违规电子商务网站建设与维护李建忠下载
  • 论坛网站论坛网站建设建设广州番禺区属于什么风险地区
  • 计算机网站开发毕业设计论文开题报告旅游网站哪个好
  • 物联网网站开发麻豆人文化活动策划有限公司
  • 成都 直播 网站建设微网站怎么注册账号
  • 珠海网站建设有限公司网站建设ftp软件
  • html5网站app开发聊天软件开发妙招
  • 专业的魔站建站系统哪个公司建网站
  • 常用的网站建设技术平台网站
  • 有什么网站可以推广信息猎聘招聘官方网站
  • 长沙模板建站平台电商网站建设制作