5_39.cpp
上传用户:zipjojo
上传日期:2009-07-20
资源大小:70k
文件大小:1k
源码类别:

文章/文档

开发平台:

C/C++

  1. # include<iostream.h>
  2. int MaxSubSum(int a[],int left,int right)
  3. {
  4. int sum=0;
  5. if(left==right) sum=a[left]>0?a[left]:0;
  6. else
  7. {
  8. int center=(left+right)/2;
  9. int leftsum=MaxSubSum(a,left,center);
  10. int rightsum=MaxSubSum(a,center+1,right);
  11. int s1=0;
  12. int lefts=0;
  13. for(int i=center;i>=left;i--)
  14. {
  15. lefts+=a[i];
  16. if(left>s1) s1=lefts;
  17. }
  18. int s2=0;
  19. int rights=0;
  20. for(int j=center+1;j<=right;j++)
  21. {
  22. rights+=a[j];
  23. if(rights>s2) s2=rights;
  24. }
  25. sum=s1+s2;
  26. if(sum<leftsum) sum=leftsum;
  27. if(sum<rightsum) sum=rightsum;
  28. }
  29. return sum;
  30. }
  31. int MaxSum(int n,int a[])
  32. {
  33. return MaxSubSum(a,1,n);
  34. }
  35. void main()
  36. {
  37. int arrSize; //元素的个数
  38. int * arr,i,ss;
  39. cout<<"Please enter the number of array elements:";
  40. cin>>arrSize; //临时分配元素的个数
  41. arr=new int[arrSize]; //临时分配这些元素所需的内存空间(堆内存中)
  42. if(arr!=NULL) //判断,堆空间不够分配时,系统会返回一个空指针值NULL
  43. {
  44. cout<<"nPlease enter the array elements:n";
  45. for (i=0;i<arrSize;i++) //逐个输入数组元素
  46. cin>>arr[i];
  47. cout<<endl;
  48. for (i=0;i<arrSize;i++) //显示数组元素
  49. cout<<arr[i]<<"  "; // arr[i] 可替换为*(arr+i)
  50. cout<<endl;
  51. ss=MaxSum(arrSize,arr);
  52.         cout<<"最大子段和为:"<<ss<<endl;
  53. delete[]arr; //释放堆内存
  54. }
  55. else
  56. cout<<"Can't allocate more memory.n";
  57. }