動態規則 最大子段和問題

2021-04-01 20:40:14 字數 694 閱讀 1257

給定由n個整數(可能為負數)組成的序列 a1 , a2 , ... , an

求該序列形如 for k = i to j : sum = sum + ak : next k

的子段和的最大值.

問題有很多解法,而用動態規則解是最簡單的。

設b[j] = max(1<=i<=j) , 1 <= j <= n

則b[j] = max , 1 <= j <= n

動態規則問題最重要的是得出

遞迴式而這正是問題的難點,至少對我來說比較難

分析問題,找到問題是否有最優子結構,由最優子結構的性質得出

遞迴式#include "iostream.h"

int maxsum( int n , int *a , int &besti , int &bestj )

else

if( t > sum )

}return sum;

}void main()

;int n = 6;

int bi , bj;

int best = maxsum( n , a , bi , bj );

cout<<"最大子段和為:"<

cout<<"起點 "<

}參考資料:

《計算機演算法分析與設計》電子工業出版社

程式有所改進

動態規劃 最大子段和問題

問題 給定n個整數 可以為負數 的序列 a1 a2 an 求其最大子段和 連續的某個子串 分析 蠻力法的話,o n2 分治法,將序列分為左右兩部分分別求最大子段和,從分界點開始向兩邊分別找最大子段和再合併,取最大即可。複雜度遞推式 t n 2t n 2 o n o nlogn 動態規劃,最優子結構的...

動態規劃之最大子段和問題

問題描述 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。當所有整數均為負值時定義其最大子段和為0。依此定義,所求的最優值為 例如,當 a1,a2 a3 a4 a5 a6 2,11,4,13,5,2 時,最大子段和為 11 4 13 20 1 最大子段和問題的簡單演算...

動態規劃之最大子段和問題

有一由n個整陣列成的序列a 求該序列如 a i a i 1 a j 的子段和的最大值。如果序列中全部是負數則最大子段和為0,依此定義,所求的最優值max,1 i j n。輸入 n 序列的長度 序列值輸出 最大子段和 例如 輸入 6 2,11,4,13,5,2 輸出 20演算法可通過動態規劃求解 我們...

動態規劃之最大子段和問題

問題描述 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。當所有整數均為負值時定義其最大子段和為0。依此定義,所求的最優值為 例如,當 a1,a2 a3 a4 a5 a6 2,11,4,13,5,2 時,最大子段和為 11 4 13 20 1 最大子段和問題的簡單演算...

4 4最大子段和問題(動態規劃)

問題 給定有n個整數 包含負整數 組成的序列a1,a2,a3,an,求該序列子段和的最大值。注意 當所有整數均為負值時,定義其最大欄位和為0 由bj的定義 bj是1到j位置的最大子段和 易知,當bj 1 0時bj bj 1 aj,否則bj aj。則計算bj的動態規劃遞迴式 bj max,1 j n。...