/*
最大子段和问题:
对于一个序列: -6,9,8,-10,100,-99
其中:最大子段和为:100
子段长度为:10
*/
#include < stdio.h >
#include < stdlib.h >
#define MAX 101
int main( void )
{
int i,j,k,n,max = 0 ,sum = 0 ;
int sj = 0 , sk = 0 ,st = 0 ;
int a[MAX] = { 0 } ;
scanf( " %d " , & n);
for (i = 1 ; i <= n ; i ++ )
scanf( " %d " , & a[i]);
for (i = 1 ,sj = 1 ; i <= n; i ++ )
{
if (sum >= 0 )
sum += a[i] ;
else
{
sum = a[i];
sj = i ;
}
if (sum > max)
{
max = sum ;
st = sj ;
sk = i ;
}
}
printf( " max = %d " ,max); /* 输出最优值 */
printf( " The result is : " ); /* 输出最优解 */
for (i = st ; i <= sk ; i ++ )
printf( " %d " ,a[i]);
printf( " " );
system( " pause " );
return 0 ;
}