問題描述:給定整數a1,a2,a3.....an(可能為負數),找出最大鄰近子串行之和,如果全為負數,則為零?
演算法描述:分治演算法是一種利用遞迴來解決問題的重要技術,由兩部分組成:
(1)分割,遞迴解決更小的問題(當然,基本情形除外)
(2) 攻克,根據子問題的解決方案形成原始問題的解決方案。
針對本問題,可以將整數序列劃分為兩半,於是最大鄰近子串行可能以3中方式出現。
情形1:完全在前半部分
情形2:完全在後半部分
情形3:開始於前半部分,結束於後半部分。
情形1,2就是遞迴呼叫,主要分析下情形3的情況,雖然它有n/2個起始點和n/2個截止點,但是考慮到這個序列必須包含前半部分的最後乙個數以及後半部分的第乙個數,我們可以通過兩個連續的迴圈來計算出這種情形的最大數。
template
comparable maxsubsum(const vector&a,int left,int right)
for(int i=center;imaxrightborder)
maxrightborder=rightborder;
}return max3(leftmax,rightmax,maxleftborder+maxrightborder);//選擇3個中最大的乙個
}
最大連續子串行和 問題
為了證書,重新開始刷資料結構,原本也就是學的一知半解的,上來就給我來了乙個最大子串行和問題,搞得我很無奈,貌似hdu1003就是這個問題.第一 重新定義乙個新的sum陣列,然後進行儲存連續子串行的和,遇到前面的加和sum i 1 小於0,就直接讓sum i a i include include i...
最大連續子串行和問題
第一次看 資料結構與演算法分析 c語言描述 這本書的時候,被書中一上來就給的最大子串行和問題給直接鎮住了。直觀感覺就是好難,好牛逼。問題描述 給定整數k1,k2,k3,kn,求從第i個數到第j個數的最大值。如果所有整數均為負數,那麼最大子串行和規定為0 根據題目描述,最直接的演算法就是窮舉所有的從i...
最大上公升子串行和
3532 最大上公升子串行和 檢視 提交 統計 提問 總時間限制 1000ms 記憶體限制 65536kb 描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 i...