給定由n個整數(包含負整數)組成的序列a1,a2,…,an,求該序列子段和的最大值。
當所有整數均爲負值時定義其最大子段和爲0。
所求的最優值爲:
例如,當(a1,a2, ……a7,a8)=(1,-3, 7,8,-4,12, -10,6)時,
最大子段和爲:
#include<iostream>
#define MAX_LEN 1001
using namespace std;
int a[MAX_LEN];
void getMaxSum(int* a,int n){
int besti;
int bestj;
int max=0;
int temp=0;
int begin=0;
for(int i=0;i<n;i++){
if(temp>0){
temp+=a[i];
}else{
temp=a[i];
begin=i;
}
if(max<temp){
max=temp;
besti=begin;
bestj=i;
}
}
cout<<max<<" "<<besti<<" "<<bestj;
}
int main(){
int maxSum;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
getMaxSum(a,n);
}