最大子段和

来源:互联网 发布:最好的源码下载网站 编辑:程序博客网 时间:2024/05/18 17:04

动态规划求解,既简单,也好理解

设dp[i]为选第i个数的最大子段和

则有dp[i]=max(dp[i-1],0)+a[i]

最后在遍历数组找出最大值就可以了。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
int a[4000000];
int dp[4000000];
int main()
{
cin >> n;
for (int i = 0;i < n;i++)
cin >> a[i];
for (int i = 0;i < n;i++)
dp[i + 1] = max(dp[i] ,0 ) + a[i];
int ans = -10000000;
for (int i = 0;i < n;i++)
ans = max(ans, dp[i + 1]);
cout << ans;
return 0;
}