题目描述:
给出一个整数序列 S,其中有N个数,定义其中一个非空连续子序列,求其中最大序列和 。
变量条件: N为正整数, N <= 1000000, 结果序列和在区间(-2E63, 2E63 -1)内 (即序列和需要用 long long 整型)。
输入: 第一行为一个整数 N,第二行输出序列中的数
输出: 序列S的最大序列和
测试示例:
输入:
5
1 5 -3 2 4
输出:
9
C++代码:
#include<iostream>
using namespace std;
const int MAXN = 1000000;
long long arr[MAXN];
long long dp[MAXN];
long long MaxSubsequence(int n) //求最大子序列和
{
long long maxsub=0;
for(int i=0; i<n; i++)
{
if(i == 0)
{
dp[i] = arr[i];
}
else
{
dp[i] = max(arr[i], dp[i-1] + arr[i]);
}
maxsub = max(maxsub, dp[i]);
}
return maxsub;
}
int main()
{
int n;
while(cin>>n)
{
for(int i=0; i<n; i++)
{
cin>>arr[i];
}
long long answer = MaxSubsequence(n);
cout << answer <<endl;
}
return 0;
}