51nod1254 最大子段和 V2

2022-08-22 05:48:16 字數 410 閱讀 6853

想了很久才體會出這道題的奧妙,愛恨交加的複雜情感。

思路:題目要求必須做交換操作,那麼就有以下三種情況:

顯然,1、2兩種情況與交換與否無關,即只有情況3才體現出了交換的價值。

那麼對於情況3我們又可以分兩類:

僅分析a類情況,b類情況相似。那麼我們需要從左邊找乙個最大的數交換到子段中,設此最大的數是a[k],交換到a[i]的位置(即k同時我們要求出(以a[i-1]結尾的、a[i]左側的最大子段和)以及(以a[i+1]為首的、a[i]右側的最大子段和)。

求解(以a[i-1]結尾的、a[i]左側的最大子段和):可在從左至右遍歷a[i]的同時找出a[k]和左側最大子段和,若子段和小於0則捨去;

求解(以a[i+1]為首的、a[i]右側的最大子段和):可以預先處理,從右至左求最大子段和。

問題迎刃而解。

51nod1254 最大子段和 V2

n個整數組成的序列a 1 a 2 a 3 a n 你可以對陣列中的一對元素進行交換,並且交換後求a 1 至a n 的最大子段和,所能得到的結果是所有交換中最大的。當所給的整數均為負數時和為0。例如 將 4 和 4 交換,最大子段和為11 4 13 28。input 第1行 整數序列的長度n 2 n ...

51nod 最大子段和

給出乙個整數陣列a 正負數都有 如何找出乙個連續子陣列 可以乙個都不取,那麼結果為0 使得其中的和最大?例如 2,11,4,13,5,2,和最大的子段為 11,4,13。和為20。輸入 第1行 整數序列的長度n 2 n 50000 第2 n 1行 n個整數 10 9 a i 10 9 輸出 輸出最大...

51nod 最大子段和

題面 以乙個長為n的數列,求連續子段的最大值。思路1直接列舉o n 3 tle穩穩的 include using namespace std int n,a 50050 ans int main ans max ans,t 更新最值 cout n return 0 字首和優化的列舉法,o n 2 還...