動態規劃(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...