[動態規划] 最大子段和問題


問題描述:

給定長度為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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM