51nod 最大子段和

2021-07-16 20:22:49 字數 749 閱讀 2784

給出乙個整數陣列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)

輸出

輸出最大子段和。

輸入示例

6

-211

-413

-5-2

輸出示例

20

狀態轉移方程:dp[ i ]=max(dp[ i-1 ] ,   0  )+dp[ i ];

**如下:

#include#include#includeusing namespace std;

int a[50050];

long long dp[50050];

int main()

{ int n;

while(scanf("%d",&n)!=eof)

{ int i;

long long sum;

for(i=0;i

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 還...

51nod 迴圈陣列最大子段和

這個問題就是在原來的基礎上加上了可以迴圈。那麼我們可以分兩種情況處理,一種是有從尾到頭的,例如1表示取,0表示不取,則是11000011 一種是沒有跨越的,即000111100 那麼對於第二種情況可以直接用最大欄位和做,關鍵是第一段要怎麼處理。這裡需要用到逆向思維,在1110000111這乙個答案中...

51nod 迴圈陣列最大子段和 dp

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...