从某一个数字来看,它的最大连续子串和是前面一个数字的最大连续子串和加上它本身,和他本身取较大的那一个。当位于第一个的时候自然就是他自身所以可以实现一个动态规划。
故递推式: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; }