从某一个数字来看,它的最大连续子串和是前面一个数字的最大连续子串和加上它本身,和他本身取较大的那一个。当位于第一个的时候自然就是他自身所以可以实现一个动态规划。
故递推式:dp[i] = max(dp[i-1]+dp[i], dp[i])。
//dp[i] = max(dp[i-1]+dp[i], dp[i])
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6+10;
int n;
int a[maxn];
int dp[maxn];
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for (int i=1;i<=n;i++) {
cin>>a[i];
}
int ans = 0;
for (int i=1;i<=n;i++) {
dp[i] = max(dp[i-1]+a[i], dp[i]);
ans = max(ans, dp[i]);
}
cout<<ans;
return 0;
}

京公网安备 11010502036488号