using namespace std; int MaxSum(int* a,int n) {
int sum = 0; //用于记录最大的连续子数组和
int flag = 0;//用于记录负数的个数
int MaxNum = *a;//用于记录数组中最大的数
int ThisSum = 0;//用于记录当前的连续子数组和
for(int i = 0; i < n; ++i)
{
if(a[i] < 0) //如果无素为负数,则把flag的值加1
++flag;
if(MaxNum < a[i]) //记录数组当前的最大值
MaxNum = a[i];
ThisSum += a[i]; //累加更新当前的子数组之和
if(ThisSum > sum)
{
//若当前连续子数组之和大于记录的子数组之和
//则设置最大连续子数组之和为当前的和
sum = ThisSum;
}
else if(ThisSum < 0)
{
//如果当前连续子数组之和小于0,则抛弃之前的连续子数组,
//从此元素的下一个元素重新计算连续子数组之和
ThisSum = 0;
}
}
//若全是负数,最大值为数组中的最大无素
if(flag == n)
sum = MaxNum;
return sum;
}
int main() {
int n;
cin>>n;
int *a=new int[n];
for(int i=0;i<n;i++)
cin>>a[i];
cout<<MaxSum(a,n)<<endl;
delete []a;
return 0;
}