模板题,直接使用最大连续子段和即可。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int n;
int a[50005];
int maxsum(int a[], int n)
{
int start,end;
int tmp = a[0];
int max = a[0];
int i, tmpstart = 0, tmpend = 0;
start = 1;
end = 1;
for(i = 1; i < n; i++)
{
if(tmp >= 0) //可以是>0 也可以是>=0,看怎么要求
{
tmp += a[i];
tmpend = i;
}
else
{
tmp = a[i];
tmpstart = i;
tmpend = i;
}
if(max < tmp)
{
start = tmpstart + 1;
end = tmpend + 1;
max = tmp;
}
}
return max;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int res=maxsum(a,n);
printf("%d\n",res);
return 0;
}