#include <stdio.h>
#include <stdlib.h>
int count=0;
//定义全局变量用来记录递归次数
typedef struct{
int data[50010];
int length;
}List;
int Create(List *L){
int i;
for(i=0;i<L->length;i++){
scanf("%d",&L->data[i]);
}
}
int max(int a,int b){
if(a>b)return a;
else return b;
}
//C语言中的max函数需要自己补充
int Maxsum(List *L,int l,int r){
int sum=0;
if(l==r){
if(L->data[l]>0)
sum=L->data[l];
else sum=0;
}
else {
int mid=(l+r)/2;
int leftsum;
leftsum=Maxsum(L,l,mid);
int rightsum;
rightsum=Maxsum(L,mid+1,r);
int i,Maxhe=0,he=0;
for(i=l;i<=r;i++){
he+=L->data[i];
if(he<0)he=0;
if(he>Maxhe)Maxhe=he;
}
sum=Maxhe;
sum=max(sum,leftsum);
sum=max(sum,rightsum);
}
count++;
return sum;
}
int main()
{
List *L=(List *)malloc(sizeof(List));
scanf("%d",&L->length);
Create(L);
int Max_sum;
Max_sum=Maxsum(L,0,L->length-1);
printf("%d %d",Max_sum,count);
return 0;
}
3664-顺序表应用7:最大子段和之分治递归法-C语言
最新推荐文章于 2021-05-25 10:02:13 发布