01 複雜度1 最大子列和問題(20 分)

2021-08-08 19:28:20 字數 1650 閱讀 7204

給定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

輸出樣例:

#include

using

namespace

std;

//中規中矩的方法

int maxsubseqsum1(int a,int n)

//j迴圈結束

}//i迴圈 結束

return maxsum;

}int maxsubseqsum2(int a,int n)

//j迴圈結束

}//i迴圈結束

return maxsum;

}//分而治之 start

int max3( int a, int b, int c )

int divideandconquer( int list, int left, int right )

/* 下面是"分"的過程 */

center = ( left + right ) / 2; /* 找到中分點 */

/* 遞迴求得兩邊子列的最大和 */

maxleftsum = divideandconquer( list, left, center );

maxrightsum = divideandconquer( list, center+1, right );

/* 下面求跨分界線的最大子列和 */

maxleftbordersum = 0; leftbordersum = 0;

for( i=center; i>=left; i-- ) /* 左邊掃瞄結束 */

maxrightbordersum = 0; rightbordersum = 0;

for( i=center+1; i<=right; i++ ) /* 右邊掃瞄結束 */

/* 下面返回"治"的結果 */

return max3( maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum );

}int maxsubseqsum3( int list, int n )

//分而治之 end

int maxsubseqsum4( int a, int n )

return maxsum;

}int main()

01 複雜度1 最大子列和問題 20

時間限制 10000 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序...

01 複雜度1 最大子列和問題 20

programming ability test 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 1000...

01 複雜度1 最大子列和問題 20

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...