上机

#include<iostream>

using namespace std;

 

int maxresearch(int a[100000], int left, int right) {

 

 int sum = 0;

 if (left == right)

  sum = a[left] > 0 ? a[left] : 0;

 else

 {

  int center = (left + right) / 2;

  int leftsum = maxresearch(a, left, center);

  int rightsum = maxresearch(a, center + 1, right);

  int s1 = 0;

  int lefts = 0;

  for (int i = center; i >= left; i--)

  {

   lefts += a[i];

 

   if (lefts > s1)

    s1 = lefts;

  }

  

  int s2 = 0;

  int rights = 0;

  for (int i = center + 1; i <= right; i++)

  {

   rights += a[i];

 

   if (rights > s2)

    s2 = rights;

  }

 

  sum = s1 + s2;

 

  if (sum < leftsum)

   sum = leftsum;

  if (sum < rightsum)

   sum = rightsum;

 }

 

 return sum;

}

 

 

 

int main() {

 int n, a[100000];

 cin >> n;

 for (int i = 1; i < n; i++)

  cin >> a[i];

 

 cout<<maxresearch(a, 1, n - 1);

}

posted @ 2020-09-28 16:02  岑瀚阳  阅读(91)  评论(0编辑  收藏  举报