连续子数组最大和
主要思路:dp数组的定义:dp【i】表示以第i位结尾的子数组的最大和。转态转移:如果dp[i-1]大于0,dp[i]=dp[i-1]+nums[i];如果小于等于0,dp[i]=sum[i]。初始化:dp【0】=nums[0]
#include<bits/stdc++.h>
using namespace std;
const int N = 2 * 1e5 + 5;
int n, x;
// dp数组
int dp[N];
int id = 0, res;
int main() {
cin >> n;
int nn = n;
int nums[n];
while (n--) {
cin >> x;
nums[id] = x;
id++;
}
n = nn;
dp[0] = nums[0];res=nums[0];
for (int i = 1; i < n; i++) {
if (dp[i - 1] > 0) {
dp[i] = nums[i] + dp[i - 1];
} else {
dp[i] = nums[i];
}
res = dp[i] > res ? dp[i] : res;
}
cout << res << endl;
return 0;
}