问题描述:
最大子段和问题是将一个n个整数的序列a[1],a[2]….a[n]中字段a[i]….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,子段为a[2],a[3],a[4]。
问题 F: 最长子序列
题目描述
在一个数组中找出和最大的连续几个数。(至少包含一个数)
例如:
数组A[] = [-2,1,-3,4,-1,2,1,-5,4],则连续的子序列[4,-1,2,1]有最大的和6.
输入
第一行输入一个不超过1000的整数n。
第二行输入n个整数A[i]。
输出
输出一个整数,表示最大的和。
样例输入
3
1 1 -2
样例输出
2
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1000;
int A[N];
int B[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> A[i];
}
B[1] = A[1];
for (int j = 2; j <= n; j++)
{
B[j] = max((B[j - 1] + A[j]), A[j]); //核心公式
}
int max_B = B[1];
for (int i = 1; i <= n; i++) //找到数组B的最大值即为答案
{
if (B[i] > max_B)
{
max_B = B[i];
}
}
cout << max_B << endl;
return 0;
}