输入格式:
输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。
标题输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
6
-2 11 -4 13 -5 -2
输出样例:
20
题解
#include <iostream>
#include<cstdio>
using namespace std;
int Maxseque(int a[],int n){
int thisSum,MaxSum;
MaxSum=0;
for(int i=0;i<n;i++){
thisSum=0;
for(int j=i;j<n;j++){
thisSum+=a[j];
if(thisSum>MaxSum)
MaxSum=thisSum;
}
}
return MaxSum;
}
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
int Max=Maxseque( a,n);
cout<<Max<<endl;
return 0;
}
第二种方法,在线处理
#include <iostream>
#include<cstdio>
using namespace std;
int maxsequearry(int n, int a[]){
int thissum,maxsum;
thissum=maxsum=0;
for(int i=0;i<n;i++){
thissum+=a[i];
if(thissum>maxsum)
maxsum=thissum;
else if(thissum<0)
thissum=0;
}
return maxsum;
}
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
int max=maxsequearry(n,a);
cout<<max<<endl;
return 0;
}