Maximum sum 最大子段和問題

2021-10-23 04:04:05 字數 1945 閱讀 8754

題目描述:給出一段序列,包含n個數。在這段序列中找出兩端子串行,使得這兩段子序列的和最大。

題目分析:

這是一道最大子段和的延伸問題。

我們可以分別求出左往右和從右往左的最大子段和,然後再遍歷一遍尋找最大值即可。

下面以從左往右為例講一下怎麼求最大子段和。

狀態表示:f[i] //表示1-i這一段序列中包含的最大子段和是多少狀態計算:可以用sum來表示當前的子段和為多少。讓sum與f[i-1]進行比較,保留最大值即可。

狀態轉移方程為:f[i]=max(f[i-1],sum+a[i])

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

const

int n=

5e4+5;

using

namespace std;

int a[n]

,b[n]

,c[n]

;//用b來儲存從左往右的最大子段和

intmain()

//用c來儲存從右往左的最大子段和

//要重新開始計算(即sum=0)

//同理,求從右往左的最大子段和

c[n+1]

=-1e9;

sum=0;

for(

int i=n;i>

0;i--

)printf

("%d\n"

,ans);}

return0;

}

最大子段和

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