每日c/c++題 備戰藍橋杯(洛谷P1115 最大子段和)

洛谷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={ai?current_sum+ai??if?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://www.pswp.cn/web/79615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79615.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端取經路——框架修行:React與Vue的雙修之路

大家好,我是老十三,一名前端開發工程師。在前端的江湖中,React與Vue如同兩大武林門派,各有千秋。今天,我將帶你進入這兩大框架的奧秘世界,共同探索組件生命周期、狀態管理、性能優化等核心難題的解決之道。無論你是哪派弟子,掌握雙修之術,才能在前端之路上游刃有余。準…

PyTorch API 1 - 概述、數學運算、nn、實用工具、函數、張量

文章目錄 torch張量創建操作索引、切片、連接與變異操作 加速器生成器隨機采樣原地隨機采樣準隨機采樣 序列化并行計算局部禁用梯度計算數學運算常量逐點運算歸約操作比較運算頻譜操作其他操作BLAS 和 LAPACK 運算遍歷操作遍歷操作遍歷操作遍歷操作遍歷操作遍歷操作遍歷操作遍歷…

java命令行打包class為jar并運行

1.創建無包名類: 2.添加依賴jackson 3.引用依賴包 4.命令編譯class文件 生成命令: javac -d out -classpath lib/jackson-core-2.13.3.jar:lib/jackson-annotations-2.13.3.jar:lib/jackson-databind-2.13.3.jar src/UdpServer.java 編譯生成class文件如下 <

ABC 轉 STL 全攻略:格式解析、方法實操與問題解決

在 3D 建模與設計領域&#xff0c;不同格式文件間的轉換是一項基礎且重要的操作。ABC&#xff08;Alembic&#xff09;和 STL&#xff08;Standard Triangle Language&#xff09;是其中常見的兩種格式。ABC 格式因其高效存儲和傳輸 3D 數據的特性&#xff0c;常被用于影視特效…

編寫一個處理txt的loader插件,適用于wbepack

處理txt的webpack的loader插件 編寫一個處理txt的loader插件&#xff0c;適用于wbepack 編寫一個處理txt的loader插件&#xff0c;適用于wbepack 實現一個處理txt的插件&#xff0c;給文本每行前后添加**** module.exports function txtLoader(content) {// 確保 Loader 是異…

DeepSeek的100個應用場景

在春節前夕&#xff0c;浙江杭州的AI企業DeepSeek推出了其開源模型DeepSeek-R1&#xff0c;以僅相當于Open AI最新模型1/30的訓練成本&#xff0c;在數學、編程等關鍵領域展現出媲美GPT-o1的出色性能。發布僅數日&#xff0c;DeepSeek-R1便迅速攀升至中美兩國蘋果應用商店免費榜…

ev_loop_fork函數

libev監視器介紹&#xff1a;libev監視器用法-CSDN博客 libev loop對象介紹&#xff1a;loop對象-CSDN博客 libev ev_loop_fork函數介紹:ev_loop_fork函數-CSDN博客 libev API吐血整理&#xff1a;https://download.csdn.net/download/qq_39466755/90794251?spm1001.2014.3…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】金融風控分析案例-10.1 風險數據清洗與特征工程

&#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 文章大綱 PostgreSQL金融風控分析案例&#xff1a;風險數據清洗與特征工程實戰一、案例背景&#xff1a;金融風控數據處理需求二、風險數據清洗實戰&#xff08;一&#xff09;缺失值…

OpenCV 的 CUDA 模塊中用于將一個多通道 GpuMat 圖像拆分成多個單通道圖像的函數split()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::cuda::split 是 OpenCV CUDA 模塊中的一個函數&#xff0c;用于將一個多通道的 GpuMat 圖像拆分成多個單通道的 GpuMat 圖像。這個函數是 CP…

【WebRTC-13】是在哪,什么時候,創建編解碼器?

Android-RTC系列軟重啟&#xff0c;改變以往細讀源代碼的方式 改為 帶上實際問題分析代碼。增加實用性&#xff0c;方便形成肌肉記憶。同時不分種類、不分難易程度&#xff0c;在線征集問題切入點。 問題&#xff1a;編解碼器的關鍵實體類是什么&#xff1f;在哪里&什么時候…

c語言第一個小游戲:貪吃蛇小游戲03

我們為貪吃蛇的節點設置為一個結構體&#xff0c;構成貪吃蛇的身子的話我們使用鏈表&#xff0c;鏈表的每一個節點是一個結構體 顯示貪吃蛇身子的一個節點 我們這邊node就表示一個蛇的身體 就是一小節 輸出結果如下 顯示貪吃蛇完整身子 效果如下 代碼實現 這個hasSnakeNode(…

架構思維:通用架構模式_系統監控的設計

文章目錄 引言什么是監控三大常見監控類型1. 次數監控2. 性能監控3. 可用率監控 落地監控1. 服務入口2. 服務內部3. 服務依賴 監控時間間隔的取舍小結 引言 架構思維&#xff1a;通用架構模式_從設計到代碼構建穩如磐石的系統 架構思維&#xff1a;通用架構模式_穩如老狗的SDK…

精益數據分析(46/126):深入剖析用戶生成內容(UGC)商業模式

精益數據分析&#xff08;46/126&#xff09;&#xff1a;深入剖析用戶生成內容&#xff08;UGC&#xff09;商業模式 在創業與數據分析的征程中&#xff0c;每一種商業模式都蘊含著獨特的價值與挑戰。今天&#xff0c;我們依舊懷揣著共同進步的信念&#xff0c;深入研讀《精益…

QMK鍵盤固件中LED鎖定指示燈的配置與使用詳解(實操部分+拓展)

QMK鍵盤固件中LED鎖定指示燈的配置與使用詳解 大家好!今天就跟大家一起探索QMK固件中LED鎖定指示燈的配置與使用。無論你是鍵盤DIY新手還是老司機,相信這篇教程都能幫你解鎖新技能! 一、基礎配置:定義LED引腳 在QMK固件中配置LED鎖定指示燈非常簡單,只需在config.h文件…

CVE體系若消亡將如何影響網絡安全防御格局

CVE體系的核心價值與當前危機 由MITRE運營的通用漏洞披露&#xff08;CVE&#xff09;項目的重要性不容低估。25年來&#xff0c;它始終是網絡安全專業人員理解和緩解安全漏洞的基準參照系。通過提供標準化的漏洞命名與分類方法&#xff0c;這套體系為防御者建立了理解、優先級…

一周學完計算機網絡之三:1、數據鏈路層概述

簡單的概述 數據鏈路層是計算機網絡體系結構中的第二層&#xff0c;它在物理層提供的基本服務基礎上&#xff0c;負責將數據從一個節點可靠地傳輸到相鄰節點。可以將其想象成一個負責在兩個相鄰的網絡設備之間進行數據 “搬運” 和 “整理” 的 “快遞中轉站”。 幾個重要概念…

?WordToCard使用分享?

https://www.wordtocard.com 家人們&#xff0c;今天發現了一個超好用的工具——WordToCard&#xff01;&#x1f61c; 它可以把WordToCard文檔轉換成漂亮的知識卡片&#xff0c;學習筆記、知識整理和內容分享都變得超輕松&#xff5e;&#x1f917; 支持各種WordToCard語法…

擴展:React 項目執行 yarn eject 后的 package.json 變化詳解及參數解析

擴展&#xff1a;React 項目執行 yarn eject 后的 package.json 變化詳解及參數解析 什么是 yarn eject&#xff1f;React 項目執行 yarn eject 后的 package.json 變化詳解1. 腳本部分 Scripts 被替換2. 新增構建依賴 dependencies&#xff08;部分&#xff09;3. 新增 Babel …

[Java實戰]Spring Boot 整合 Redis(十八)

[Java實戰]Spring Boot 整合 Redis&#xff08;十八&#xff09; 在現代的分布式應用開發中&#xff0c;Redis 作為一種高性能的鍵值存儲數據庫&#xff0c;被廣泛用于緩存、消息隊列、排行榜等多種場景。Spring Boot 提供了強大的支持&#xff0c;使得整合 Redis 變得非常簡單…

【氮化鎵】GaN在不同電子能量損失的SHI輻射下的損傷

該文的主要發現和結論如下: GaN的再結晶特性 :GaN在離子撞擊區域具有較高的再結晶傾向,這導致其形成永久損傷的閾值較高。在所有研究的電子能量損失 regime 下,GaN都表現出這種傾向,但在電子能量損失增加時,其效率會降低,尤其是在材料發生解離并形成N?氣泡時。 能量損失…