HDU 1003 Max Sum
本题跟最大子序列差不多,是姊妹题,其实解决了上个,这个只要解决几个地方就可以了,请注意如果有全部是负数,就把这些负数中最大的输出来。
#include<stdio.h>
#include<string.h>
int t,n,pos,num[110000],add[110024],pri[110024];
void cal( )
{
int pos = 1;
for( int i = 1; i <= n; ++i )
{
if( add[i-1] >= 0 && (add[i-1] + num[i] >= 0) )//here
{
add[i] = add[i-1] + num[i];
pri[i] = pri[i-1];
}
else//here
add[i] = num[i];
if( add[i] > add[pos] )
pos = i;
}
if( num[pos] < 0 )
printf( "%d %d %d\n",num[pos],pos,pos );
else
printf( "%d %d %d\n",add[pos],pri[pos],pos );
}
int main( )
{
scanf( "%d",&t );
for( int i = 1; i <= t; ++i )
{
if( i != 1 )
puts( "" );
scanf( "%d",&n );
memset( add,0,sizeof( add ) );
pri[0] = 1;
for( int i = 1; i <= n; ++i )
{
pri[i] = i;
scanf( "%d",&num[i] );
}
printf( "Case %d:\n",i );
cal( );
}
return 0;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号