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 分治法 分析 首先將陣列分為兩部分,最大子段和 可以在陣列的左半部分也可以在右半部分,也可以橫跨分割點,因此我們只需要用分治思想求出左邊最大...