题解 | #最大子串和#
最大子串和
https://ac.nowcoder.com/acm/problem/235948
对于每个元素a[i]分两种情况
1. 以 为区间左端点构建一个新的连续区间
2. 将 并入 所属的连续区间
答案为每个连续区间的和取max
(下标从开始到)
因此枚举每个 , 用状态转移方程 得到 到间所有连续区间和的最大值dp (即的意义)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
long long dp[N], a[N];
int main() {
long long n, ans = 0;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) {
dp[i] = max(a[i], dp[i - 1] + a[i]);//分两种情况,从i重新开始或和接上前一个
ans = max(ans, dp[i]);
}
cout << ans;
return 0;
}