#include <stdio.h>
int main ( )
{
int N= 6 , j= 0 ;
int MaxSubseqSum1 ( int A[ ] , int N) ;
int A[ 10 ] = { - 2 , 11 , - 4 , 13 , - 5 , - 2 } ;
j= MaxSubseqSum1 ( A, N) ;
printf ( "%d" , j) ;
return 0 ;
}
int MaxSubseqSum1 ( int A[ ] , int N)
{
int MaxSum= 0 , ThisSum= 0 , i, j, k;
for ( i= 0 ; i< N; i++ )
{
for ( j= i; j< N; j++ )
{
ThisSum= 0 ;
for ( k= i; k<= j; k++ )
ThisSum+ = A[ k] ;
if ( ThisSum> MaxSum)
MaxSum= ThisSum;
}
}
return MaxSum;
}
#include <stdio.h>
int main ( )
{
int N= 6 , j= 0 ;
int A[ 6 ] = { - 2 , 11 , - 4 , 13 , - 5 , - 2 } ;
int MaxSubseqSum1 ( int A[ ] , int N) ;
j= MaxSubseqSum1 ( A, N) ;
printf ( "%d" , j) ;
return 0 ;
}
int MaxSubseqSum1 ( int A[ ] , int N)
{
int MaxSum= 0 , ThisSum= 0 , i, j, k;
for ( i= 0 ; i< N; i++ )
{
ThisSum= 0 ;
for ( j= i; j< N; j++ )
{
ThisSum+ = A[ j] ;
if ( MaxSum< ThisSum)
MaxSum= ThisSum;
}
}
return MaxSum;
}
int Max3 ( int A, int B, int C)
{
return A> B? A> C? A: C: B> C? B: C;
}
int DivideAndConquer ( int List[ ] , int left, int right)
{
int MaxLeftSum, MaxRightSum;
int MaxLeftBorderSum, MaxRightBorderSum;
int LeftBorderSum, RightBorderSum;
int center, i;
if ( left== right) {
if ( List[ left] > 0 )
return List[ left] ;
else return 0 ;
}
center= ( left+ right) / 2 ;
MaxLeftSum= DivideAndConquer ( List, left, center) ;
MaxRightSum= DivideAndConquer ( List, center+ 1 , right) ;
MaxLeftBorderSum= 0 ; LeftBorderSum= 0 ;
for ( i= center; i>= left; i-- ) {
LeftBorderSum+ = List[ i] ;
if ( LeftBorderSum> MaxLeftBorderSum)
MaxLeftBorderSum= LeftBorderSum;
}
MaxRightBorderSum= 0 ; RightBorderSum= 0 ;
for ( i= center+ 1 ; i<= right; i++ ) {
RightBorderSum+ = List[ i] ;
if ( RightBorderSum > MaxRightBorderSum)
MaxRightBorderSum = RightBorderSum;
}
return Max3 ( MaxLeftSum, MaxRightSum, MaxLeftBorderSum+ MaxRightBorderSum) ;
}
int MaxSubseqSum3 ( int List[ ] , int N)
{
return DivideAndConquer ( List, 0 , N- 1 ) ;
}
#include <stdio.h>
int main ( )
{
int N, j= 0 ;
int MaxSubseqSum1 ( int A[ ] , int N) ;
scanf ( "%d" , & N) ;
int A[ N] ;
for ( int i= 0 ; i< N; i++ )
scanf ( "%d" , & A[ i] ) ;
j= MaxSubseqSum1 ( A, N) ;
printf ( "%d" , j) ;
return 0 ;
}
int MaxSubseqSum1 ( int A[ ] , int N)
{
int MaxSum= 0 , ThisSum= 0 , i;
for ( i= 0 ; i< N; i++ )
{
ThisSum+ = A[ i] ;
if ( ThisSum> MaxSum)
MaxSum= ThisSum;
else if ( ThisSum< 0 )
ThisSum= 0 ;
}
return MaxSum;
}