
// 求最大子列和
#include <cstdio>
int a[5];
// O(n^3)
int MaxSeq1(int a[], int n)
{
int max = 0, sum = 0;
for(int i = 0; i < n; ++ i)
{
for(int j = i; j < n; ++ j)
{
sum = 0;
for(int k = i; k <= j; ++ k)
{
sum += a[k];
}
if(sum > max) max = sum;
}
}
return max;
}
// O(n^2)
int MaxSeq2(int a[], int n)
{
int max = 0, sum = 0;
for(int i = 0; i < n; ++ i)
{
sum = 0;
for(int j = i; j < n; ++ j)
{
sum += a[j];
if(sum > max) max = sum;
}
}
return max;
}
// 在线处理 O(n)
// "在线"的意思是指每输入一个数据就进行及时处理
// 在任何一个地方终止输入, 算法都能正确给出当前解
int MaxSeq4(int a[], int n)
{
int sum = 0, max = 0;
for(int i = 0; i < n; ++ i)
{
sum += a[i];
if(sum > max) max = sum;
else if(sum < 0) sum = 0;
}
return max;
}
int main()
{
for(int i = 0; i < 5; ++ i)
{
scanf("%d", &a[i]);
}
printf("%d\n", MaxSeq4(a, 5));
return 0;
}
/*
1 6 -5 9 -3
11
*/