一道xjoi上的题,点这里
也可以直接访问这个地址 https://xjoi.net/problem/3277
话不多说,放题!
数组中子段的最大总和。
例如,1,2,3,-5,4,3,-6 中的最大子段总和是
1+2+3+(-5)+4+3 = 8
第一行输入整数n
第二行输入n个整数
整数,表示该数组的最大子段和
7 1 2 3 -5 4 3 -6
8
1<=n<=100000,−10000<=序列元素<=10000
提示:请各位大佬能用鄙人理解的方法去做,在此表示感谢!
(如果能改正我的代码就更好了)
#include<iostream>
#include<cstdio>
using namespace std;
int x[100005];
int main()
{
int n,max,flag;
long long p=0,q=0;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&x[i]);
flag=1;
for(int i=1;i<=n;i++)
{
if(x[i]>=0)
{
flag=0;
break;
}
}
if(flag==1)
{
cout<<0;
return 0;
}
for(int i=1;i<=n;i++)
{
if(p+x[i]<0)
p=0;
else
{
p+=x[i];
if(p>q)
q=p;
}
}
cout<<q;
return 0;
}
再次对帮助的博主表示感谢!