求解 最大子段和問題

2021-09-12 19:57:55 字數 689 閱讀 7075

1.通過分治法求解最大子段和問題

遞迴來求解:

#include#define n0 10

int maxsum(int a[n0],int left,int right) //出口

center=(left+right)/2;

leftsum=maxsum(a,left,center);

rightsum=maxsum(a,center+1,right);

s1=0; lefts=0;

for(j=center;j>=left;j--)

s2=0;rights=0;

for(j=center+1;j<=right;j++)

sum=s1+s2;

if(sum2.第二種就是直接列舉,暴利求解最大子問題,看著蠻簡單的

#include#define n0 10

void main();

int sum,lsum;

int i,j;

sum=0;

for(i=0;isum) sum=lsum;

} }printf("序列(");

for(j=0;jprintf("%5d",a[j]);

printf(")\n");

printf("的最大子段和為:%5d\n",sum);

}

求解最大子段和問題 分治 蠻力 dp

問題描述 給定乙個有n n 1 個整數的序列,要求求出其中最大連續子串行的和。例如 序列 2,11,4,13,5,2 的最大子串行和為20 序列 6,2,4,7,5,3,2,1,6,9,10,2 的最大子串行和為16。規定乙個序列最大子段和至少是0,如果小於0,其結果為0。蠻力法 窮舉所有連續子串行...

動態規劃求解最大子段和

子段 連續 如果定義中間變數b j max 1.j 即固定末尾位置j,往前數i個最大的子段和 則全序列最大子段和即遍歷所有的b j 即max max 如果b j 1 0,則b j b j 1 a j 這是因為b j 是從最後乙個元素a j 往前數,即必然包含a j 而a j 前面的元素又 0,那肯定...

最大子段和問題

給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0 分治法 分析 首先將陣列分為兩部分,最大子段和 可以在陣列的左半部分也可以在右半部分,也可以橫跨分割點,因此我們只需要用分治思想求出左邊最大...