給定k個整數組成的序列,「連續子列」被定義為,其中 1≤i≤j≤k。「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。
本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下:
輸入第1行給出正整數k (≤100000);第2行給出k個整數,其間以空格分隔。
在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。
6根據浙江大學的資料結構課程,陳越姥姥的講解,這裡給出她在課堂上四個演算法的實現**。-2 11 -4 13 -5 -2
演算法1:複雜度t(n) = o(n^3)
int
maxsubseqsum1
(int a,
int n)
//j迴圈結束
}//i迴圈結束
return max;
}
演算法2:複雜度t(n) = o(n^2)int
maxsubseqsum2
(int a,
int n)
//j迴圈結束
}//i迴圈結束
return max;
}
演算法3 ,分而治之 ,複雜度o(nlogn)int
max3
(int a,
int b,
int c )
intdivideandconquer
(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 );}
intmaxsubseqsum3
(int list,
int n )
int
maxsubseqsum4
(int a,
int n )
return maxsum;
}
#include
"stdio.h"
#define size 100000
intmaxsubseqsum1
(int a,
int n)
}return max;
}int
maxsubseqsum2
(int a,
int n)
}return max;
}// 第三個演算法
intmax3
(int a,
int b,
int c )
intdivideandconquer
(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 );}
intmaxsubseqsum3
(int list,
int n )
intmaxsubseqsum4
(int a,
int n )
return maxsum;
}int
main
(int argc,
char
const
*ar**)
printf
("%d\n"
,maxsubseqsum4
(a, n));
}return0;
}
PTA 01 複雜度1 最大子列和問題
題目描述 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 與...
PTA 複雜度1 最大子列和問題
題目 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 與樣例...
01 複雜度1 最大子列和問題
給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...