int MaxSubseqSum(int a[],long K);
int Max3(int a,int b,int c);
int DivideConquer(int a[],long K);
int main(int argc,char* argv[])
{
long K;
int i;
scanf("%ld",&K);
int a[K];
for(i=0;i<K;i++){
scanf("%d",&a[i]);
}
printf("%d",MaxSubseqSum(a,K));
return 0;
}
int MaxSubseqSum(int a[],long K)
{
return DivideConquer(a,K);
}
int Max3(int a,int b,int c)
{
int max=a;
max=a>b?a:b;
max=max>c?max:c;
return max;
}
int DivideConquer(int a[],long K)
{
int MaxLeftSum=0,MaxRightSum=0,MaxBorderSum=0;
int MaxLeftBorderSum=0,MaxRightBorderSum=0;
int ScanSum=0;
long center=K/2;
int i;
for(i=center-1,ScanSum=0;i>=0;i--){
ScanSum+=a[i];
if(ScanSum>MaxLeftBorderSum) MaxLeftBorderSum=ScanSum;
}
for(i=center,ScanSum=0;i<=K-1;i++){
ScanSum+=a[i];
if(ScanSum>MaxRightBorderSum) MaxRightBorderSum=ScanSum;
}
MaxBorderSum=MaxLeftBorderSum+MaxRightBorderSum;
//递归基础
if(K==1){
return a[0]>0?a[0]:0;
}
//递归调用
MaxLeftSum=MaxSubseqSum(a,center);
MaxRightSum=MaxSubseqSum(a+center,K-center);
return Max3(MaxLeftSum,MaxRightSum,MaxBorderSum);
}
《数据结构》01-复杂度1 最大子列和问题
最新推荐文章于 2024-10-15 21:23:11 发布