迴圈陣列最大子段和(動態規劃思想的巧妙轉換)

2022-07-30 18:36:08 字數 1073 閱讀 2546

個人心得:這是一道好題,線性的最大欄位和在動態規劃中是司空見慣的。所以對於這種動態規劃的思想的巧妙轉變也是需要

鍛鍊的,就像在暑假集訓裡面碰到的從1到k是遞增,k到n是遞減的k使得此時的和最大,當時也是毫無辦法,雖然後面

想到了分別將首尾展開然後分別求遞增的最大和,題目就迎刃而解了。其實這一題題目的分解還是很明白的,

最大值無非就是線性動態規劃和橫跨倆端的子段,橫跨倆端的子段最簡單就是倆層迴圈很明顯超時了,後面想著從左邊找到最大

的並標誌,但是很明顯倆段最大值不一定是在一段最大值的前提下,所以後面聽取了隊友的意見,發現了找出中間的最大負長度子段和。

希望以後能夠多開發點思維,讓問題變得更簡單!

題目:n個整數組成的迴圈序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的連續的子段和的最大值(迴圈序列是指n個數圍成乙個圈,因此需要考慮a[n-1],a[n],a[1],a[2]這樣的序列)。當所給的整數均為負數時和為0。

例如:-2,11,-4,13,-5,-2,和最大的子段為:11,-4,13。和為20。

input

第1行:整數序列的長度n(2 <= n <= 50000)

第2 - n+1行:n個整數 (-10^9 <= s[i] <= 10^9)

output

輸出迴圈陣列的最大子段和。
input示例

6

-211

-413

-5-2

output示例

20
1 #include2 #include3 #include

4 #include5 #include6 #include7 #include8 #include

9 #include10 #include11

using

namespace

std;

12#define in 1000000007

13int

main()

1434 cout35return0;

36 }

動態規劃 最大子段和

給定乙個陣列a a0,a1,a2,an 求陣列中 連續子段之和 的最大值。1 最簡單的演算法 窮舉法 計算所有的連續子段之和,得出最大值 窮舉法 計算所有的子串行和 o n 3 public static int maxsum1 int data max tmp max tmp max return...

動態規劃 最大子段和

題目描述 給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入輸出格式 輸入格式 第一行是乙個正整數nn,表示了序列的長度。第二行包含n個絕對值不大於10000的整數a i,描述了這段序列。輸出格式 乙個整數,為最大的子段和是多少。子段的最小長度為1。輸入輸出樣例 輸入樣例 1 72 4 3 ...

動態規劃 最大子段和

動態規劃 最大子段和 lyk喜歡幹一些有挑戰的事,比如說求區間最大子段和。它知道這個題目有o n 的做法。於是它想加強一下。也就是說,lyk一開始有n個數,第i個數字是ai,它找來了乙個新的數字p,並想將這n個數字中恰好乙個數字替換成p。要求替換後的最大子段和盡可能大。lyk知道這個題目仍然很簡單,...