最大子串行和的詳解

2021-10-10 23:38:51 字數 946 閱讀 5389

例:求數列的最大子段和。 給定n個元素的整數列(可以能為負整數),a1,a2,…,an。求數列的字段,使其和最大。

例如:當(a1, a2, a3, a4, a5, a6)=(-2, 11, -4, 13, -5, -2)時,最大子段和為sum(11-4+13)=20。

我這裡採用兩種方法:①遍歷的方法  ②分治法

原理分析:遍歷該陣列,每遍歷乙個i元素就判斷temp+a[i]是否大於a[i],如果大於就更新temp=temp+a[i],否則temp=a[i],最後temp跟當前最大子串行和maxsum比較,如果大於,則maxsum=temp;否則不更新maxsum;最後遍歷完,直接返回maxsum.

遍曆法的c語言原始碼:

#include//類似於01揹包問題

int start,end;

int maxsubsequencesum( int a, int n)

else

if (tempsum > maxsum)

}return maxsum;

}int main()

} s1 = 0; //右邊臨時和

rt = 0;

for(i = mid + 1;i <= right; i++)

} s = s0 + s1;

if (s< leftsum&&rightsum < leftsum)

return leftsum;

else if (sleftsum)

return rightsum;

else

}}int main()

sum = minsum(a, 0, num-1);

printf("%d %d %d\n", sum,start,end);

} return 0;

}

和最大子串行

問題描述 第一行輸入乙個正整數n 1 n 100001 第二行輸入n個整數a 0 a 10000 求該組整數子串行最大的和。解決這個問題應該考慮輸入n較大的情況,也就是說,輸入100000個數字判斷它的和最大子串行應當也能很快地算出來。我看過很多求解的 有三重for迴圈的,有兩重for迴圈的,也有使...

最大子串行和

最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最後找到和最大的子...

和最大子串行

時間限制 1 sec 記憶體限制 512 mb 提交 3 解決 3 提交 狀態 討論版 對於乙個給定的長度為n的整數序列a,它的 子串行 的定義是 a中非空的一段連續的元素 整數 你要完成的任務是,在所有可能的子串行中,找到乙個子串行,該子串行中所有元素的和是最大的 跟其他所有子串行相比 程式要求你...