最大連續子段和 (hdu 1003)
1.問題描述
給定一串整數, 例如 6 -1 5 4 -7, 求最大連續子段和?
2.演算法介紹
此題不能暴力, o(n^2)的時間複雜度必然超時。
考慮如下演算法:
設mi表示前i個整數包含第i個整數的最大連續子段和。
sum (i, j) 表示第i個整數到第j個整數的和, 最大連續子段和就是max sum
(i, j), 也就是max mi;
情況一: 如果m(i-1) <= 0, 則 mi = 第i個整數
情況二: 如果m(i - 1) > 0, 則 mi = m(i - 1) + 第i個整數
以上兩種情況, 不管第i個整數如何都成立。
所以, 可以在o(n)的時間內求出所有的mi, 記錄最大mi即為所求的最大連續
子段和。
在杭電上的1003題, 還需要計算出最大連續子段的始末位置。
起始位置只在一種情況下被改變, 就是當某個mi <= 0, 並且之後的某個mj >
max mi;
3. 源**
#include int main()
if (sum < 0)
}printf ("case %d:\n", count ++);
printf ("%d %d %d\n", max, start + 1, end + 1);
if (t > 0)
}return 0;
}
最大連續子段和
最大連續子段和 給定長度為n的整數序列,a 1.n 求 1,n 某個子區間 i,j 使得a i a j 和最大,或者求出最大的這個和。例如 2,11,4,13,5,2 的最大子段和為20,所求子區間為 2,4 窮舉法 3次for迴圈 第1次for迴圈,遍歷陣列所有數字,即確定子段和的首個數字 第2次...
總結 最大連續子段和
給你乙個序列,讓你在其中找一段連續的子串行,使得這個連續的子串行的和是最大的。它實際上有點動態規劃的意思在裡面,設f i 表示以第i個數字作為結尾的連續子串行的和的最大可能值。則 f i max f i 1 a i a i 這裡的 f i 1 a i 實際上表示的就是,讓a i 和以a i 1 結尾...
求最大連續子段和 的 dp演算法
問題描述 有n個數 以下都視為整數,浮點的也一樣 每個數有正有負,現在要在n個數中選取相鄰的一段,使其和最大,輸出最大的和。問題分析 對於這樣的問題,我們可以直接用暴力,乙個雙重迴圈,雖說可以,但也沒有更高明的方法?我們再分析這個問題,如果我們知道了某個數前面一段數的和,我們就該考慮把這個數加入到前...