8 最大子列和

2022-06-19 14:03:11 字數 1015 閱讀 8039

問題描述:對給定陣列a,尋找a的和最大的非空連續子陣列。

輸入格式:輸入的第一行包括乙個整數n,代表陣列中的元素個數,接下來的一行包含n個整數(可以包含負數),以空格分隔。

輸出格式:乙個整數,表示最大的連續子陣列的和。

樣例輸入:

9

2  4  -7  5  2  -1  2  -4  3

樣例輸出:

思路:1.分治法

分解:把陣列從中間位置劃分成兩個子陣列。

解決:使用分治法遞迴地求解這兩個子陣列的最大子陣列。當規模縮小到子陣列長度為1時,直接返回該元素的值。

合併:求解跨越兩個子陣列的最大子陣列,即跨越這個相鄰子陣列合成的陣列中點的最大子陣列,並與之前得到的結果進行比較,選取和最大者。

時間複雜度:o(nlogn)

code:

#include#include

using

namespace

std;

vector

a;intn;

int solve(int l, int

r)

for (int i = mid+1; i <= r; i++)

return max(max(maxl, maxr), maxsuml+maxsumr);

}int

main()

2.動態規劃

dp[n] 表示以第n個數為結尾的最大子列和。

dp[n] = max(0, dp[n-1]) + a[n]。

時間複雜度為o(n)

#includeusing

namespace

std;

intn;

intmain()

cout

}

最大子列和

int maxsubsequencesum const int a,int n if thissum maxsum 如果新的子列和更大,則更新子列和 maxsum thissum return maxsum 時間複雜度o n3 int maxsubsequencesum const int a,in...

最大子列和

給出乙個長度為 n 的序列 a,選出其中連續且非空的一段使得這段和最大。第一行是乙個整數,表示序列的長度 n。第二行有 n 個整數,第 i個整數表示序列的第 i個數字 a i 輸出一行乙個整數表示答案。輸入7 2 4 3 1 2 4 3 輸出資料範圍 對於 40 的資料,保證 n leq 2 tim...

最大子列和

最大連續子串行和問題 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子序中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大連續子串行和即為20。注 為方便起見,如果所有整數均為負數,則最大子串行和為0。解決這樣乙個問題是乙個很有趣的過程,我們可以...