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

2021-09-28 11:40:43 字數 1425 閱讀 5040

題目描述:給定k個整數組成的序列,「連續子列」被定義為,其中 1≤i≤j≤k。「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。

本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下:

資料1:與樣例等價,測試基本正確性;

資料2:102個隨機整數;

資料3:103個隨機整數;

資料4:104個隨機整數;

資料5:105個隨機整數;

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

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

輸入樣例

6-2 11 -4 13 -5 -2

輸出樣例:20

演算法解析:本題採用分治的思想進行實現。對於乙個序列,我們可以將其從中間分成兩個子串行,分別求左右子串行的最大子串行和,以及以分割點為基礎向左右兩邊擴充套件的最大子串行和。

那麼不停的遞迴下去,知道左右序列都為1個,再進一步計算,求三個最大子列和的最大值返回。利用奇妙的遞迴和分治就能在o(nlogn)之內完成本題了

ac**

#include

int a[

100000];

intmaxsub

(int a,

int begin,

int end)

;int

max3

(int a,

int b,

int c)

intmain()

printf

("%d"

,maxsub

(a,0

,k-1))

;}intmaxsub

(int a,

int begin,

int end)

else

for(i=mid+

1; i<=end; i++

)//leftsum

leftsum =

maxsub

(a, begin, mid)

;//rightsum

rightsum =

maxsub

(a, mid+

1, end);}

return

(max3

(leftsum, rightsum, midsum));

}

PTA 7 1 最大子列和問題

給定k個整數組成的序列,最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 與樣例等價,測試基本正確性 資料2 102個隨機整數 ...

PTA 7 1 最大子列和問題 20分

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 輸入第1行給出正整數...

7 1 最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 與樣例等價,...