提供三种方法,其实都是大同小异
#include<bits/stdc++.h>
using namespace std;
int n,a,b,i,ans=-2147483647;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a;
if(i==1) b=a;
else b=max(a,a+b);
ans=max(ans,b);
}
cout<<ans;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[200010];
int main(){
int n;
cin>>n;
int ans=0;
int sum=0;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++){
sum=max(sum,a[i]);
}if(sum==0){
cout<<*max_element(a+1,a+n+1);
}else{
sum=0;
for(int i=1;i<=n;i++){
if(sum+a[i]<0){
sum=0;
}else{
sum+=a[i];
} ans=max(ans,sum);
} cout<<ans;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int inf =2147483647;
int a[200010];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}int ans=-inf;
for(int i=0;i<n;i++){
ans=max(ans,a[i]);
}
if(ans<=0){
cout<<ans;
}else{
int sum=0;
for(int i=0;i<n;i++){
if(sum+a[i]<0){
sum=0;
}else{
sum+=a[i];
}ans=max(ans,sum);
} cout<<ans<<endl;
}
return 0;
}