第一次写博客....
一道icpc选拔赛的水题..
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[100005],n;
int maxsum()//正常求最大连续子段和
{
int res,tmp;
res=tmp=a[0];
for(int j=1;j<n;j++)
{
if(tmp<0)
tmp=a[j];
else
tmp+=a[j];
res=max(res,tmp);
}
return res;
}
int minsum()
{
if(n<=2)
return 0;//如果数组元素个数小于2就直接返回
int res,tmp;
res=tmp=a[1];
//除去首尾结点 找出其中的最小子段和 否则意义就和maxsum相同了
for(int j=2;j<n-1;j++)
{
if(tmp>0)
tmp=a[j];
else
tmp+=a[j];
res=min(res,tmp);
}
return res;
}
int main()
{
int tt=0,ans;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
tt+=a[i];}
/*int k1=maxsum();
int k2=minsum();
printf("**%d %d\n",k1,k2);*/
ans=max(maxsum(),tt-minsum());
printf("%d\n",ans);
return 0;
}