#include "stdio.h"
#define MAXN 50000
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()
{
int T;
scanf("%d", &T);
while(T > 0)
{
scanf("%d", &n);
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);
T --;
}
return 0;
}
注意:使用cout,cin超时
POJ2479
最新推荐文章于 2019-05-09 11:34:00 发布