1. 程式人生 > 實用技巧 >動態規劃演算法總結

動態規劃演算法總結

1. 題源:牛課網,題號:OR176 連續子陣列最大和 
  題目:輸入一個整形陣列(可能有正數和負數),求陣列中連續子陣列(最少有一個元素)的最大和。要求時間複雜度為O(n)。
  思路:
  • 動態規劃最簡單的方法就是依次列舉給出當前陣列的幾個元素,從後往前推理出陣列與當前元素和結果陣列的關係。
  • 當前陣列:[a1,a2,a3,a4,a5]
  • 結果陣列:[maxsum1, maxsum2, maxsum3, maxsum4, maxsum5]
  • 列出簡單地幾個元素:[a1,a2,a3]
  • 從後往前推理找到當前結點與結果陣列的前面若干結點的關係。
  • suma3如何求呢? : 可能的組合情況情況: [a1, a2, a3] [a2 ,a3] [a3] , 如果 suma2 < 0, 那麼sum = a3 ; 如果 suma2 >= 0 那麼sum =sum + a3。其中:suma2就是比較[a1, a2]和[a2]比較誰大
  • 那麼suma2如何求呢? sum2 : 可能情況:[a1, a2] [a2] 如果suma1<0, 那麼 sum = a2; 如果suma1>=0, 那麼sum=sum + a2
  • 那麼suma2如何求呢? sum1就是a1

2.