![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e1a10eca75b871978b9827a6bd183c3c.png)
#include<stdio.h>
int MaxSubSequenceSum(int A[],int N);
void main()
{
int i,N;
scanf("%d",&N);
int A[N];
for(i=0;i<N;i++){
scanf("%d",&A[i]);
}
printf("%d\n",MaxSubSequenceSum(A,N));
}
int MaxSubSequenceSum(int A[],int N)
{
int i,j,ThisSum,MaxSum;
MaxSum=0;
for(i=0;i<N;i++){
ThisSum=0;
for(j=i;j<N;j++){
ThisSum+=A[j];
if(ThisSum>MaxSum){
MaxSum=ThisSum;
}
}
}
return MaxSum;
}
#include<stdio.h>
int MaxSubSequenceSum(int A[],int N);
int MaxSubSum(int A[],int Left,int Right);
int Max3(int a,int b,int c);
void main()
{
int i,N;
scanf("%d",&N);
int A[N];
for(i=0;i<N;i++){
scanf("%d",&A[i]);
}
printf("%d\n",MaxSubSequenceSum(A,N));
}
int MaxSubSequenceSum(int A[],int N)
{
return MaxSubSum(A,0,N-1);
}
int MaxSubSum(int A[],int Left,int Right)
{
int MaxLeftSum,MaxRightSum;
int MaxLeftBordenSum,MaxRightBordenSum;
int LeftBordenSum,RightBordenSum;
int Center,i;
if(Left==Right)
if(Left>0)
return A[Left];
else
return 0;
Center=(Left+Right) / 2;
MaxLeftSum=MaxSubSum(A,Left,Center);
MaxRightSum=MaxSubSum(A,Center+1,Right);
MaxLeftBordenSum=0; LeftBordenSum=0;
for(i=Center;i>=Left;i--){
LeftBordenSum+=A[i];
if(LeftBordenSum>MaxLeftBordenSum)
MaxLeftBordenSum=LeftBordenSum;
}
MaxRightBordenSum=0; RightBordenSum=0;
for(i=Center+1;i<=Right;i++){
RightBordenSum+=A[i];
if(RightBordenSum>MaxRightBordenSum)
MaxRightBordenSum=RightBordenSum;
}
return Max3(MaxLeftSum,MaxRightSum,MaxLeftBordenSum+MaxRightBordenSum);
}
int Max3(int a,int b,int c)
{
int max;
max=(a>b?a:b)>c?(a>b?a:b):c;
return max;
}
#include<stdio.h>
void main()
{
int i,N;
scanf("%d",&N);
int A[N];
for(i=0;i<N;i++){
scanf("%d",&A[i]);
}
printf("%d\n",MaxSubsequenceSum(A,N));
}
int MaxSubsequenceSum(int A[],int N)
{
int j,ThisSum,MaxSum;
ThisSum=MaxSum=0;
for(j=0;j<N;j++){
ThisSum+=A[j];
if(ThisSum>MaxSum){
MaxSum=ThisSum;
}else if(ThisSum<0)
ThisSum=0;
}
return MaxSum;
}