#include<iostream>
using namespace std;
#define NUM 1001
int a[NUM];
int b[NUM];//b[i]是以a[i]为结尾时对应的的最大子段和。MAX=max(b[i])。返回b的最大值。
int Maxsum(int n)
{
int sum = 0;
int left=0, right=0;//left表示起点,right表示终点。
for (int i = 1; i <= n; i++)
{
if (b[i - 1] > 0)
{
b[i] = a[i] + b[i - 1];//如果b前面的数大于0,b[i]=b[i-1]+a[i]。
}
else//如果前面的数小于0,那前面的数就没有利用价值了,b[i]=a[i]。
{
b[i] = a[i];
left = i;//同时从新定义起点。
}
if (b[i] > sum)
{
sum = b[i];//更新b的最大值。
right = i;//此时的i是终点。
}
}cout << "(" << left << "," << right <<")" << endl;
return sum;
}
int main()
{
cout << "请输入个数n" << endl;
int n; cin >> n;
cout << "请输入每个数的值" << endl;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
a[i] = x;
}
cout << "选中的子段是:" << endl;
int y = Maxsum(n);
cout << "最大的子段和是" << y << endl;
}