连续子数组最大和

主要思路: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;
}