最大子段和(動態規劃及分治法)

動態規劃法:

首先給一個任意的序列來說明這個問題

1 2 3 -1 -5 4 5 8

  1. 首先設一個dp數組,dp[i]表示前i個區間的最大子段和
  2. 如果dp[i-1] > 0,那麼dp[i] = dp[i-1] + a[i]
  3. 否則dp[i] = a[i]
int max = 0;  
int b[n+1];  
int start = 0;  
int end = 0;  
memset(b,0,n+1);  
for(int i = 1; i <= n; ++i)  
 {  
   if(b[i-1]>0)  
   {  
     b[i] = b[i-1]+a[i];  
   }else{  
     b[i] = a[i];  
   }  
   if(b[i]>max)  
     max = b[i];  
 }   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章