洛谷 - P1115 - 最大子段和 - 简单dp

https://www.luogu.org/problemnew/show/P1115

简单到不想说……dp[i]表示以i为结尾的最大连续和的值。

那么答案肯定就是最大值了。求一次max就可以了。

仔细想想连线性的空间都不需要了。

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int n;
int a[200005];
int dp[200005];
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    dp[0]=a[0];
    for(int i=1;i<n;i++){
        dp[i]=max(0,dp[i-1])+a[i];
    }

    int ans=*max_element(dp,dp+n);
    printf("%d\n",ans);
}

猜你喜欢

转载自www.cnblogs.com/Yinku/p/10317805.html