1 #include <stdio.h> 2 #include <stdlib.h> 3 int a[60000],c=0; 4 int i; 5 int max(int m,int n) 6 { 7 if(m>n)return m; 8 else return n; 9 } 10 int sum(int ii,int jj) 11 { 12 int maxsum=0; 13 c++; 14 if(ii==jj) 15 { 16 if(a[ii]>0)maxsum=a[ii]; 17 else 18 { 19 maxsum=0; 20 } 21 } 22 else 23 { 24 int mid=(ii+jj)/2; 25 int lsum=sum(ii,mid); 26 int rsum=sum(mid+1,jj); 27 int ss,s1,s2; 28 s1=ss=0; 29 for(i = mid; i>=ii; --i) 30 { 31 ss+=a[i]; 32 if(ss>s1)s1 = ss; 33 } 34 s2 = ss = 0; 35 for(i = mid+1; i<=jj; ++i) 36 { 37 ss+=a[i]; 38 if(ss>s2)s2 = ss; 39 } 40 maxsum=s1+s2; 41 maxsum=max(maxsum,lsum); 42 maxsum=max(maxsum,rsum); 43 } 44 return maxsum; 45 } 46 int main() 47 { 48 int n; 49 scanf("%d",&n); 50 for(i=0; i<n; i++) 51 { 52 scanf("%d",&a[i]); 53 } 54 int max1=sum(0,n-1); 55 printf("%d %d\n",max1,c); 56 return 0; 57 }
原文:https://www.cnblogs.com/Angfe/p/11638129.html