P1115 最大子段和 一维动态规划

#include<iostream>
#include<cmath>
using namespace std;
long long n,a[200005],dp[200005],ans;

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    dp[1]=a[1];
    ans=a[1];
    for(int i=2;i<=n;i++)
    {
        dp[i]=max(a[i],dp[i-1]+a[i]);
        ans=max(ans,dp[i]);
    }
    cout<<ans;
}

先上此题的AC代码

思想:当我们选取数组中的某个数时,我们考虑的是对其进行后续的加和操作,这时候我们想要基础数据尽可能大,所以要选取dp[i]+a[i]和a[i]中更大的值,并用ans进行实时更新

posted @ 2023-07-12 17:42  ataraxyyeah  阅读(13)  评论(0)    收藏  举报