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