问题
思路
这个题做了好几次了,套路应该是DAG模型的最短路。我不是很确定,但是我觉得类似。具体来说,状态定义的时候:dp[i]表示以array[i]结尾的连续数组最大和,因为题目要求是连续,所以我觉得一定要以array[i]结尾。至于最大,最后把状态数组扫描一遍即可。
代码
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int sz = array.size();
if(!sz) return 0;
vector<int> dp( sz, 0 );
dp[0] = array[0];
int ans = dp[0];
for(int i = 1; i < sz; ++i){
dp[i] = ( dp[i-1] < 0 )?array[i]:dp[i-1] + array[i];// 状态转移方程
ans = ( dp[i] > ans )?dp[i]:ans;
}
return ans;
}
};