都快晕死了,,,本来以为改来改去是改不正确的...
没想到居然改正确了,,真心崩溃了- -#
0(n)的算法
贴出代码:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
//#define max(a, b) (a) > (b) ? a : b
using namespace std;
int a[11111];
int s[11111];
int n;
int best;
int start, end;
int Solve()
{
s[0] = 0;
int min = a[1];
best = a[1];
for (int i = 1; i <= n; i++)
{
s[i] = s[i - 1] + a[i];
}
int MIN;
for (int j = 2; j <= n; j++)
{
if (best < s[j] - min)
{
best = s[j] - min;
end = j;
MIN = min;
}
if (s[j] <= min)
{
min = s[j];
}
// cout << "start = " << start << " " << "end =" << end << endl;
// cout << "best = " << best << endl;
}
for (int i = 1; i <= n; i++)
{
if (s[i] == MIN)
{
start = i;
}
}
return best;
}
int main()
{
while (scanf("%d", &n) != EOF)
{
start = end = 1;
// memset(s, 0, sizeof(0));
if (n == 0)
{
break;
}
best = -1111111111;
int flag = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
if (a[i] >= 0)
{
flag = 1;
}
}
if (n == 1)
{
printf("%d %d %d\n", a[1], a[1], a[1]);
continue;
}
if (flag == 0)
{
printf("0 %d %d\n", a[1], a[n]);
continue;
}
int ans = Solve();
if (ans == 0)
{
printf("0 0 0\n");
}
else
{
printf("%d %d %d\n", ans, a[start + 1], a[end]);
}
}
// system("pause");
return 0;
}