演算法與資料結構 動態規劃

2021-07-13 02:54:58 字數 774 閱讀 6117

動態規劃(dp)的基本思想是:當前子問題的解可由上一子問題的解得出。

動態規劃演算法通常基於由乙個遞推公式(狀態轉移方程)和若干個初始狀態(狀態)。

應用

1、lis(longest increasing subsequence):求乙個陣列中的最長非降子串行的長度。

子問題

我們可以考慮先求a[0]、a[1]、a[2] ... a[i]的最長非降子串行長度,這個lis的乙個子問題。

接著,我們可以已定義d[i]來表示前i個數中以a[i]結尾的最長非降子串行長度。

當我們求出d[1]~d[n],那麼其中最大的數就是所求。

i與i-1的關係

假設已經得到了d[1]~d[i-1],那麼d[i]就是前i-1個數中小於等於a[i]的那些數對應的最長非降子串行長度

的最大值。

code

public class lis 

}// 找出最大長度

for (int k = 0; k < array.length; k++)

return result;

}public static void main(string args) ;

system.out.println("最長非降子串行的長度為" + new lis().lis(array) + "。");

}}

演算法與資料結構 動態規劃

用遞迴求解問題時,反覆的巢狀會浪費記憶體。而且更重要的一點是,之前計算的結果無法有效儲存,下一次碰到同乙個問題時還需要再計算一次。例如遞迴求解 fibonacci 數列,假設求第 n 位 從 1 開始 的值,c 如下 include intfib int n return fib n 1 fib n...

資料結構與演算法練習 動態規劃

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...

資料結構與演算法 156 159 動態規劃

揹包問題 有乙個揹包,容量為4磅,物品重量 吉他 g 11500 音響 s 43000 電腦 l 32000 動態規劃演算法介紹 動態規劃演算法最佳實踐 揹包問題 物品重量 吉他 g 11500 音響 s 43000 電腦 l 32000 思路和 v i 0 0 j 0 當 w i j時 v i j...