動態規劃專題 最大連續子串行和 A1007

2021-08-15 19:32:47 字數 755 閱讀 6598

最大連續子串行和問題如下

給定乙個數字序列a1,a2,…,an,求i,j(1<=i<=j<=n),使得ai+….+aj最大,輸出這個最大和。

樣例:-2 11 -4 13 -5 2

1、令狀態dp[i]表示以a[i]為結尾的連續序列的最大和,則dp[0] = -2,dp[1] = 11,dp[2] = 7,dp[3] = 20,dp[4] = 15,dp[5] = 13。

2、做如下考慮,因為dp[i]要求是必須以a[i]為結尾的連續序列,那麼只有兩種情況

a、最大和序列只有乙個元素,即以a[i]開始,a[i]結尾

b、最大和序列有多個元素,且從前面a[p] (p

#include

#include

void maxsublinear(int a[10010], int n)

if(a[i]>=0) allnegative = 0;

/* 與最大子串行和比較,更新最大子串行和 */

if (cursum > maxsum)

/* 動態規劃部分,捨棄當前和為負的子串行 */

if (cursum < 0)

}//situation: all the numbers are negative

if(allnegative)

printf("%d

%d%d",maxsum,a[out_begin],a[out_end]);

}int main()

動態規劃 最大連續子串行和

題目大意就是讓你選出一段和最大的連續序列,當有幾個序列和並列時,選出下標最小的的連續序列。可以採用動態規劃的思想解決,設一連續序列為a 0 a 1 a n 分別以a 0 a 1 a n 結尾的最大序列和為d 0 d 1 d n 若d i 1 0,則d i d i 1 a i 若d i 1 0,則d ...

動態規劃 最大連續子串行和

動態規劃 最大連續子串行和 問題描述 給定乙個數字序列a1,a2,an,求i,j 1 i j n 使得ai aj最大,輸出這個最大和。樣例 211 413 5 2顯然 11 4 13 20 為和最大的選取情況,因此最大和為20 下面介紹動態規劃的做法,複雜度為o n 讀者會發現其實左端點的列舉是沒有...

動態規劃 最大連續子串行和

給定乙個數字序列,a1,a2,an,求i,j 1 i j n 使得ai aj最大,輸出這個最大和。樣例輸入 2 11 4 13 5 2 輸出 20 即11 4 13 20 最大 分析 如果暴力做的話,乙個列舉,需要o n 2 在計算需要o n 一共需要o n 3 因為重複計算的太多了,還是設定乙個d...