最大子段和(动态规划及分治法)

动态规划法:

首先给一个任意的序列来说明这个问题

1 2 3 -1 -5 4 5 8

最大子段和(动态规划及分治法)_第1张图片

  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];  
 }   

 

你可能感兴趣的:(动态规划,dp)