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 ",ans); }