最大连续和(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;
}