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

2021-10-05 13:43:09 字數 928 閱讀 8797

問題:給定有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。

#define num 1001

int a[num];

int maxsum(int n)

int sum=0; 

int b=0;

for (int i=1;i<=n;i++)

if (b>0) b+=a[i]; else b=a[i];

if (b>sum) sum=b;

return sum;

#include

using namespace std;

#define num 1001

int a[num];

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

int sum=0;

int b=0;

int begin=0;

for(int i=1;i<=n;i++)

if(b>0)b+=a[i];

else

if(b>sum)

sum=b;

besti=begin;

bestj=i;

return sum;

int main()

for(int i=0;i<8;i++)

cin>>a[i];//1 -3 7 8 -4 12 -10 6

int besti=0,bestj=0;

int sum=0;

sum=maxsum(8,besti,bestj);

cout

動態規劃 最大子段和問題

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

4 4最大子段和問題

給定由n個整數組成的序列 a1,a2,an 最大子段和問題要求該序列形如圖的最大值 1 i j n 當序列中所有整數均為負整數時,其最大子段和為0。例如,序列 20,11,4,13,5,2 的 最大子段和為 最大子段和問題的分治策略是 1 劃分 按照平衡子問題的原則,將序列 a1,a2,an 劃分成...

動態規劃 最大子段和

給定乙個陣列a a0,a1,a2,an 求陣列中 連續子段之和 的最大值。1 最簡單的演算法 窮舉法 計算所有的連續子段之和,得出最大值 窮舉法 計算所有的子串行和 o n 3 public static int maxsum1 int data max tmp max tmp max return...