#include "stdio.h"
#define MAXN 100000
int a[ MAXN ];
int lmax[ MAXN ];
int rmax[ MAXN ];
int ldp[ MAXN ];
int rdp[ MAXN ];
int N;
void init()
{
ldp[ 0 ] = a[ 0 ];
lmax[ 0 ] = ldp[ 0 ];
for(int i = 1; i < N; i ++)
{
if(ldp[ i - 1 ] + a[ i ] < a[ i ])
{
ldp[ i ] = a[ i ];
}
else
{
ldp[ i ] = ldp[ i - 1 ] + a[ i ];
}
if(ldp[ i ] > lmax[ i - 1 ])
{
lmax[ i ] = ldp[ i ];
}
else
{
lmax[ i ] = lmax[ i - 1 ];
}
}
rdp[ N - 1 ] = a[ N - 1 ];
rmax[ N - 1 ] = rdp[ N - 1 ];
for(int i = N - 2; i >= 0; i --)
{
if(rdp[ i + 1 ] + a[ i ] < a[ i ])
{
rdp[ i ] = a[ i ];
}
else
{
rdp[ i ] = rdp[ i + 1 ] + a[ i ];
}
if(rdp[ i ] > rmax[ i + 1 ])
{
rmax[ i ] = rdp[ i ];
}
else
{
rmax[ i ] = rmax[ i + 1 ];
}
}
}
int main()
{
while(scanf("%d", &N))
{
if(N == 0)
{
break;
}
for(int i = 0; i < N; i ++)
{
scanf("%d", &a[ i ]);
}
init();
int max = -10000;
for(int i = 0; i < N - 1; i ++)
{
if(lmax[ i ] + rmax[ i + 1 ] > max)
{
max = lmax[ i ] + rmax[ i + 1 ];
}
}
printf("%d\n", max);
}
return 0;
}
POJ2593
最新推荐文章于 2019-07-03 21:43:25 发布