问题描述:
给定长度为n的整数序列,a[0...n-1], 求某个子区间[i,j]使得a[i]+…+a[j]和最大.
空间优化后的动态规划:
用两个变量sum和ans,sum用来保存当前的子段和,ans用来记录最大的子段和。
循环遍历,如果当前子段和 > 最大子段和,那么更新最大子段和;如果当前子段和 < 0,那么设置当前子段和 = 0。
1 int MaxSubsequenceSum(int a[],int n) 2 { 3 int sum=0,ans=0; 4 for(int i=0;i<n;i++){ 5 sum+=a[i]; 6 if(sum<0) 7 sum=0; 8 ans=max(sum,ans); 9 } 10 return ans; 11 }
时间复杂度:O(n)