#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int maxSubSum(int a[],int l,int r){
if(l>=r) return max(a[l],0);
int m=(l+r)>>1;
int s1=0,t1=0;
for(int i=m;i>=l;i--){
t1+=a[i];
if(t1>s1) s1=t1;
}
int s2=0,t2=0;
for(int j=m+1;j<=r;j++){
t2+=a[j];
if(t2>s2) s2=t2;
}
return max(s1+s2,max(maxSubSum(a,l,m),maxSubSum(a,m+1,r)));
}
int main()
{
int a[1000],n;
while(cin>>n){
for(int i=0;i<n;i++)
cin>>a[i];
cout<<"max sub sum:"<<maxSubSum(a,0,n-1)<<endl;
}
}
算法设计与分析之-最大子段和 (分治)
最新推荐文章于 2022-10-30 11:02:02 发布