先上代码。
//求最大子数组;
#include<iostream>
#include<climits>
using namespace std;
int fmcs(int a[],int low,int mid,int high){
int l_sum,r_sum,sum=0,mid_low,mid_high;
l_sum=INT_MIN;
for(int i=mid;i>=low;i--){
sum+=a[i];
if(sum>l_sum){
l_sum=sum;
mid_low=i;
}
}
sum=0;
r_sum=INT_MIN;
for(int i=mid+1;i<=high;i++){
sum+=a[i];
if(sum>r_sum){
r_sum=sum;
mid_high=i;
}
}
return (mid_low,mid_high,l_sum+r_sum);
}
int fms(int a[],int low,int high){
int mid,l_low,l_high,l_sum,r_low,r_high,r_sum,c_low,c_high,c_sum;
if(high==low) return(low,high,a[low]);
mid=(low+high)/2;
(l_low,l_high,l_sum)=fms(a,low,mid);
(r_low,r_high,r_sum)=fms(a,mid+1,high);
(c_low,c_high,c_sum)=fmcs(a,low,mid,high);
if(l_sum>=r_sum && l_sum>=c_sum) return (l_low,l_high,l_sum);
else if(r_sum>=l_sum && r_sum>=c_sum) return (r_low,r_high,r_sum);
else return (c_low,c_high,c_sum);
}
int main(){
int n,i,a[200002];
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
}
cout<<fms(a,0,n-1)<<endl;//离谱;
return 0;
}
如标记离谱所示。
fms函数返回的是形如(low,high,sum),但直接输出为什么总是输出sum。
求dalao解答。
bdfs无果。
另外讨论区结尾是不是也一定要加句号。