最大子段和 SDIBTOJ 2002

2021-08-09 18:34:31 字數 1351 閱讀 9009

time limit: 1 sec memory limit: 64 mb

submit: 3289 solved: 1424

[submit][status][discuss]

description

給定有n個整數(可能為負整數)組成的序列a1,a2,…,an,求該序列連續的子段和的最大值。 如果該序列的所有元素都是負整數時定義其最大子段和為0。

input

第一行有乙個正整數n(n<1000),後面跟n個整數,絕對值都小於10000。直到檔案結束。

output

輸出它的最大子段和。

sample input

6 -2 11 -4 13 -5 -2

sample output

20 hint

分別用普通o(n 3 )或o(n 2 )、分治o(nlogn)和動態規劃o(n)實現。

source

o(n^3)

//  o(n^3)

#include

int main(void)

printf("%d\n",max);

return

0;}

o(n^2)

//  o(n^2)

#include

int main(void)

}printf("%d\n",max);

return

0;}

o(nlogn)

//  o(nlogn)

#include

int maxchs(int*,int,int);

int main(void)

int maxchs(int *s, int left, int right)

for(i = mid+1; i <= right; i++)

sum = suml+sumr;

if(sum < lsum)

sum = lsum;

if(sum < rsum)

sum = rsum;

}return sum;

}

o(n)

從前向後遍歷一遍,一旦和小於等於0,則將和置位0,再向後加

//  o(n)

#include

int main(void)

printf("%d\n",max);

return

0;}

最大子段和

設a 是n個整數的序列,稱為該序列的子串行,其中1 i j n.子串行的元素之和稱為a的子段和.例如,a 2,11,4,13,5,2 那麼它的子段和是 長度為1的子段和 2,11,4,13,5,2 長度為2的子段和 9,7,9,8,7 長度為3的子段和 5,20,4,6 長度為4的子段和 18,15...

最大子段和

問題表述 n個數 可能是負數 組成的序列a1,a2,an.求該序列 例如 序列 2,11,4,13,5,2 最大子段和 11 4 13 20。1 窮舉演算法 o n3 o n2 2 分治法 將序列a 1 n 從n 2處截成兩段 a 1 n 2 a n 2 1 n 例項 三 最大子段和 問題表述 n個...

最大子段和

再給頂的n個數的陣列中選出連續的若干個數,使得他們的和是最大的,即最大連續自序列和.列如.序列.1 2 3 1 6 5 9 結果 當取子串行 3,1,6,5,9 結果12 我的思路.1.最大連續子串行的開頭是在1.n之中.的最大連續和 2.求出以i,開頭的最大連續和,此時開頭已經確定了,那麼通過列舉...