分治算法求解最大子序列

【分治算法求解最大子序列】题目:
分治算法求解最大子序列
文章图片

分治算法求解最大子序列
文章图片

分治算法求解最大子序列
文章图片

分治算法求解最大子序列
文章图片

#include #include using namespace std; int max3(int a,int b,int c) { if(a& a,int left,int right) { if(left==right) { if(a[left]>0) return a[left]; else return 0; } int center=(left+right)/2; int maxLeftSum=maxSumRec(a,left,center); //对左边分治 int maxRightSum=maxSumRec(a,center+1,right); //对右边分治 int maxLeftBorderSum=0,leftBorderSum=0; for(int i=center; i>=left; i--)//考虑“穿过中间情形”,故从中间向左边遍历 { leftBorderSum+=a[i]; if(leftBorderSum>maxLeftBorderSum) maxLeftBorderSum=leftBorderSum; } int maxRightBorderSum=0,rightBorderSum=0; for(int i=center+1; i<=right; i++)//考虑“穿过中间情形”,故从中间向右边遍历 { rightBorderSum+=a[i]; if(rightBorderSum>maxRightBorderSum) maxRightBorderSum=rightBorderSum; } return max3(maxLeftSum,maxRightSum,maxLeftBorderSum+maxRightBorderSum); //三者取最大 }int maxSubSum3(const vector& a) { return maxSumRec(a,0,a.size()-1); } int main() { int n; cin>>n; vector v; for(int i=0; i>x,v.push_back(x); } cout<

    推荐阅读