最大子段和问题。给定由n个整数组成的序列,求序列中子段的最大和,若所有整数均为负整数时定义最大子段和为0。
输入格式:
第一行输入整数个数n(1≤n≤10000),再依次输入n个整数。
输出格式:
输出最大子段和。
输入样例1:
5
-2 11 -4 13 -5 -2
输出样例1:
20
下面给出实现的代码
#include <iostream>
#include <cstdio>
using namespace std;
int A[10001];//更正
int MaxSubsequenceSum( int A[], int n)
{
int tempSum = 0;
int maxSum = 0;
for (int j = 0;j < n;j++) // 子问题后边界
{
tempSum = (tempSum + A[j]) > A[j] ? (tempSum + A[j]) : A[j];
if (tempSum > maxSum) // 更新最大和
maxSum = tempSum;
}
return maxSum;
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> A[i];
}
int maxSubSum = MaxSubsequenceSum(A, n);
if(maxSubSum<0) cout << 0;
else
cout << maxSubSum ;
system("pause");
return 0;
}