key:
用贪心法。由于一定要包含一个值, 从当前位置考虑,要得到最大值,要么加上前面的,要么不加前面的。
dp[i] = num[i] + dp[i-1] > 0? dp[i-1] : 0;
int maxSubArray(int A[], int n) {
vector<int> dp(n);
dp[0] = A[0];
int res = dp[0];
for(int i = 1; i < n; i++){
dp[i] = A[i] + (dp[i-1] < 0? 0: dp[i-1]);
res = max(dp[i],res);
}
return res;
}