問題陳述:
給定n個整數的序列,求函式ƒ(i, j) = max(1<=iint
maxsubseqsum
(int arr,
int n)}}
return maxsum;
}
int
maxsubseqsum
(int arr,
int left,
int right)
else
}int center =
(left + right)/2
;int leftmaxsum =
maxsubseqsum
(arr, left, center)
;/* 分界線左側最大子數列 */
int rigthmaxsum =
maxsubseqsum
(arr, center+
1, right)
;/* 分界線右側最大子數列 */
/* 以分界線往左求最大子數列 */
int leftbordersum =
0, maxleftbordersum =0;
for(
int i=center; i>=left; i--)}
/* 以分界線往右求最大子數列 */
int rightbordersum =
0, maxrightbordersum =0;
for(
int j=center+
1; j<=right; j++)}
/* 跨越分界線最大子數列和 */
int maxbordersum = maxleftbordersum + maxrightbordersum;
return
maxsum
(leftmaxsum, rigthmaxsum, maxbordersum);}
/*** 返回a, b, c三者最大值
*/int
maxsum
(int a,
int b,
int c)
if(a > c)
else
}
時間複雜度計算:
t(n) = 2 * t(n/2) + cn
= 22 * t(n/22) + c2n
= 2k * t(n/2k) + ckn 其中 n/2k = 1
= n * t(1) + cnlog2n
= o(nlogn)
int
maxsubseqsum
(int arr,
int n)
else
if(currentsum <0)
}return maxsum;
}
最大子列和問題
給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...
最大子列和問題
給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...
最大子列和問題
給出乙個序列,求出最大子列和。演算法一 long maxsum int a,int n return maxsum 這是乙個窮舉的演算法,有三個巢狀的for迴圈,時間複雜度為o n 3 在計算的時候有很多不必要的重複項,例如當i 0,j 3時,和的計算為 a 1 a 2 a 3 當i 0,j 4時,...