#动态规划 1. $dp_i$ 等于 以 $i$ 结尾的最大子数组和,$dp_0 = nums_0$,理解为只有一个数的数组时最大子数组和就是那一个元素 2. 当数组都为正数时,$dp_i = dp_{i-1} + nums_i$ 3. 引入负数,当之前的结果小于等于零也就是 $dp_{i-1} <= 0$ 时可以抛弃掉直接取 $nums_i$,也就是 $dp_i = \cancel{dp_{i-1} +} nums_i = nums_i$ ```cpp class Solution { public: int maxSubArray(vector<int>&nums) { vector<int> dp = nums; auto ans = dp[0]; for (int i = 1; i < nums.size(); i++) { if (dp[i - 1] > 0) dp[i] = dp[i - 1] + nums[i]; else dp[i] = nums[i]; ans = max(ans, dp[i]); } return ans; } }; ```