状态:dp[i]表示以第i个元素结尾的连续子数组的最大和
状态转移方程:
dp[i] = max( 0, dp[i-1] ) + nums[i];
#include <vector>
using namespace std;
class Solution
{
public:
int maxSubArray(vector<int>& nums)
{
int n = nums.size();
vector<int> dp(n+1,0);
if( nums[0] > 0 )
dp[0] = nums[0];
else
dp[0] = 0;
for( int i = 1; i < n; i++ )
{
dp[i] = max( 0, dp[i-1] ) + nums[i];
}
int ans = dp[0];
for( int i = 0; i < n; i++ )
ans = min( ans, dp[i] );
return ans;
}
};