DP 最大連續子段和

2021-06-09 23:03:20 字數 768 閱讀 4087

最大連續子段和 (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個數中選取相鄰的一段,使其和最大,輸出最大的和。問題分析 對於這樣的問題,我們可以直接用暴力,乙個雙重迴圈,雖說可以,但也沒有更高明的方法?我們再分析這個問題,如果我們知道了某個數前面一段數的和,我們就該考慮把這個數加入到前...