最大子列和問題(C語言 分治演算法)

2021-09-26 14:19:28 字數 1509 閱讀 5993

最大子列和問題(maximum subsequence sum)

給定k個整數組成的序列,「連續子列」被定義為

ni+1

​, …, n

jn_j

nj​ },其中 1≤i≤j≤k。「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和11。現要求你編寫程式,計算給定整數序列的最大子列和。

輸入格式:

輸入第1行給出正整數k (≤100000);第2行給出k個整數,其間以空格分隔。

輸出格式:

在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。

輸入樣例:

6-2

11-413

-5-2

輸出樣例:

20
將序列從中分為左右兩個子串行。

遞迴求得兩個子列的最大和。

從中分點分頭向左、右兩邊掃瞄,找出跨過分界線的最大子列和。

輸出這三個子列和最大的乙個。

**如下:

#include

#include

#define maxn 100000

int maxofthreenum (

int a,

int b,

int c) \\ 求三個數中得最大值

intdivideconquer

(int data,

int left,

int right)

//左邊界掃瞄

rightmaxboardsum = data[mid +1]

; rightboardsum =0;

for(

int i = mid +

1; i <= right; i++

)//有邊界掃瞄

/* 治的過程,最大值為左邊的最大值、右邊最大值,跨越邊界最大值之中的最大值 */

return

maxofthreenum

(leftmaxsum, rightmaxsum, leftmaxboardsum + rightmaxboardsum);}

intmaxsubseqsum

(int data,

int num)

// 改變函式介面

intmain()

;scanf

("%d"

,&num)

;for

(int i =

0; i < num; i++

)printf

("%d"

,maxsubseqsum

(data, num));

return0;

}

分治演算法與動態規劃的區別在於,其子問題無重疊。下期預告:動態規劃演算法(dynamic programing)。

分治法寫最大子列和問題

int max3 inta,intb,intc intdivideandconquer intlist,intleft,intright 下面是 分 的過程 center left right 2 找到中分點 遞迴求得兩邊子列的最大和 maxleftsum divideandconquer list...

演算法 最大子列和問題

浙江大學 資料結構 思考題 每週練習答案彙總 題目 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況...

最大子列和問題(C語言實現)

最大子列和問題 pta 程式設計類實驗輔助教學平台 給定k 個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情...