题意
- 给一个数组, 求子串的最大和
方法
opt[i] = max(nums[i], nums[i] + opt[i-1])
代码
class Solution {
public:
/*
状态: opt[i]
转移: opt[i] = max(nums[i] + opt[i-1], nums[i])
初始状态: opt[0] = nums[0]
*/
int maxSubArray(vector<int>& nums) {
vector<int> ans;
int res = 0, N = nums.size();
ans.push_back(nums[0]);
for (int i = 1; i < N; i++) {
int res = max(nums[i], nums[i] + ans[i-1]);
ans.push_back(res);
}
res = ans[0];
for (int i = 1; i < N; i++) {
res = max(res, ans[i]);
}
return res;
}
};