最大子段和

2021-07-05 09:11:03 字數 904 閱讀 8812

求數列的最大子段和

給定了n個元素的整數列(可能為負整數),a1,a2,a3,a4....an,求形如 ai,ai+1,ai+2....aj的子段,使其和為最大。當所有的整數字負整數時,定義其最大子段為0、

例如當(a1,a2,a3,a4,a5)=(-2,11,-4,13,-5,-2)時,其最大子段和為20.

分治演算法求解:

分治演算法中a[1:n]的最大子段和有三種情況 。a[1:n/2]和a[(n/2)+1:n]表示將數列a[1:n]等分成兩段。

數列子段和最大的三種情況:

(1)最大子段和在a[1:n/2]中

(2)最大子段和在a[(n)/2+1:n]中

(3)最大子段和在a[i:j]當中,1<=i<=n/2對於(1)和(2)兩種情況,可通過遞迴求得。對於(3),則有a[n/2]和a[n/2+1]一定在最大子段中。因此可以算出a[i:n/2]的最大值s1和aa[n/2+1:j]的最大值s2.及s1+s1為情況(3)的最優解

**如下

#include using namespace std;

int maxsum(int a,int left,int right)

else

s2=0;

rights=0;

for(int i=center+1;i<=right;i++)

if(s1+s2

#include using namespace std;

#define num 100

int a[num];

int maxsum(int n,int &besti,int &bestj)

if(b>sum)

}return sum;

}int main()

最大子段和

設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,開頭的最大連續和,此時開頭已經確定了,那麼通過列舉...