最大子数组问题:在一个数组中,找出他的一个最大子数组,并使得这个子数组的和是最大的
该子数组是连续的。例如 数组:[1,-2,3,5,-3,2]返回8; 数组:[0,-2,3,5,-1,2]返回9。
#include <iostream>
#include <algorithm>
using namespace std;
int dp[1005];
int n;
int s[1005];
int main()
{
cin >> n;
for (int i = 1;i < n;i++)
cin >> s[i];
for (int i = 1;i <= n;i++)
//要么加入以s[i-1]结尾的最大子数组中,要么另立山头
dp[i] = max(s[i], dp[i - 1] + s[i]);
//由于以任意一个数结尾的子数组都不一定是最大的,所以另开一个循环遍历整个子数组
int MAX = -1;
for (int i = 1;i <= n;i++)
MAX = max(MAX, dp[i]);
cout << MAX;
}