最大子段和

2021-07-13 12:56:27 字數 960 閱讀 9480

問題描述:

給你搞定由n個整數(可能為負整數)組成的序列a1,a2,a3,......,an,求該序列的連續子段和的最大值。當所有整數均為負整數時定義其最大子段和為0。

問題分析:

解決該問題有多種方法,在此分別用如下方法解決:

(1)窮舉搜尋法。

(2)遞迴分治法。

(3)動態規劃法。

**如下:

窮舉搜尋法

public static int maxsum()}}

return sum;}

遞迴分治法:

使用遞迴分治法的條件:原問題可以分解為與原問題性質相同的子問題(通俗講,即原問題與子問題具有相同的求解過程,計算**相同引數不同),從頂到底,先解決子問題,然後用子問題去解決原問題。

如果將所給的序列a[1:n]分為長度相等的2段a[1:n/2]和a[n/2+1,n],分別求出這兩段的最大子段和,則a[1:n]的最大欄位和有以下3種情況:

(1)a[1:n]的最大子段和與a[1:n/2]的最大欄位和相同。

(2)a[1:n]的最大子段和與a[n/2+1:n]的最大欄位和相同。

(3)a[1:n]的最大子段和為eak,且1<=i<=n/2,n/2+1<=j<=n;

演算法如下:

static int maxsubsum(int left,int right)

int s2=0;

int rights=0;

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

sum=s1+s2;

if(sumif(sum}

return sum;

}動態規劃演算法:

滿足最優子性質,遞迴式如下:

b[j]=max,1<=j<=n,

b[j]為的最大子段和

**如下:

public static int maxsum()

return sum;}

最大子段和

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