问题描述
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
#include <iostream>
using namespace std;
int max_sum(int n,int a[n]){
int ans[100] = {0}; //答案数组
int max=0;
if(a[0]>0){
ans[0]=a[0];
max=a[0];
}
for(int i=1;i<n;i++){
ans[i]=ans[i-1]+a[i];
if(ans[i]>max){
max=ans[i];
}
if(ans[i]<0){
ans[i]=0;
}
}
/*for(int i=0;i<n;i++){
cout<<ans[i];
}*/
return max;
}
int main() {
int n; //序列长度n
int a[100]; //输入的整数序列
cin>>n;
for (int i=0; i<n; i++){ //输入待计算的n个数字
cin>>a[i];
}
cout<<"最大子序列和为:"<<max_sum(n,a)<<endl;//调用max_sum函数,并且输出最大子序列和
//cout<<max_sum();
}