問題描述:
給定由n個整數(可能有負數)組成的序列,求一段連續的子串行,要求該序列和最大,並求出最大值。
分析:
將該序列平分為兩段(a1..an/2;an/2….an),最大欄位段和有三種情況,1:為左邊的最大子段和leftsum,2:為右邊的最大欄位和rightsum,3:由左邊靠近中點的最大連續子段+右邊靠近中點的最大連續子段midsum。所以最終結果為三者中的最大值(max(leftsum,rightsum,midsum))。
#include using namespace std;
int maxsum(int a,int
left,int
right);
int main()
int maxsum(int a,int
left,int
right)
s2=-9999,rights=0;
for(int i=center+1;i<=right;i++)
midsum=s1+s2;
if(midsumelse
sum=midsum;
if(sumsum=rightsum;
}return sum;
}
DP 分治 最大字段
首先用分治法 include stdio.h int maxsum int a,int left,int right for i center 1 i right i sum s1 s2 if sumvoid main 然後是動態規劃方法 include stdio.h int maxsum int...
暴力法 分治法 動態規劃法求解最大欄位和
實驗專案4 最大子段和問題 發現這個博主的 實在是太棒了 1.問題分析 給定由n個整數 可能有負整數 組成的序列 2.演算法設計思路 暴力法 對於起點 i,遍歷所有長度為1,2,n i 1的子區間和,遍歷所有的字段,找出最大欄位和。分治演算法 求解區間及其最大和,從結構上是非常適合分治法的,因為所有...
最大欄位和
include include include include include using namespace std 最大欄位和問題描述 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,...