7 1 最大子列和問題 20分

2021-10-02 04:48:28 字數 1627 閱讀 6988

7-1 最大子列和問題 (20分)

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

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

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

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

6-2

11-413

-5-2

20
#include

#include

using

namespace std;

intmain()

for(

int i =

0; i < k;

++i)

} cout << max;

return0;

}

用mid將大問題分成兩個子問題進行求解

最大子串行可能出現的位置:左邊,右邊,左右都有

若最大子串行出現在左,右兩邊:

long maxl = maxsum(a, left, mid);

long maxr = maxsum(a, mid + 1, right);

若最大子串行左右兩邊都有:先求出前半部分包含最後乙個元素的最大子列,再求出後半部分包含第乙個元素的最大子列。

比較這三種情況取最大值即可。

#include

#include

using

namespace std;

vector<

int>a;

long

max(

long a,

long b,

long c)

long

maxsum

(const vector<

int>

& a,

int left,

int right)

int mid =

(left + right)/2

;long maxl =

maxsum

(a, left, mid)

;long maxr =

maxsum

(a, mid +

1, right)

;long max_l =

0, l =0;

for(

int i = mid; i >= left;

--i)

long max_r =

0, r =0;

for(

int i = mid +

1; i <= right;

++i)

return

max(max_l, max_r, max_l + max_r);}

intmain()

cout <<

maxsum

(a,0

,k-1);

return0;

}

7 1 最大子列和問題 20 分

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

7 1 最大子列和問題 20分

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

7 1 最大子列和問題 20分

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