最大连续和(dp复习)

最大连续和:给出一段序列,选出其中连续且非空的一段使得这段和最大。

stdin:

7

2 -4 3 -1 2 -4 3

stdout:

4

状态转移方程:dp[i]=max(dp[i-1]+a[i],a[i])

如果dp(i-1)已经为负数,那么前i-1段就没有意义了,我们直接从a[i]重新开始取。

#include<iostream>
using namespace std;
int n;
long long a[200005],dp[200005];
long long total=-99999;
int main()
{
    cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
            for(int i=1;i<=n;i++)
            {dp[i]=max(dp[i-1]+a[i],a[i]);
            total=max(total,dp[i]);}
        cout<<total<<endl;
    return 0;
}

 

posted @ 2020-02-01 17:56  remarkableboy  阅读(328)  评论(0编辑  收藏  举报