演算法學習 動態規劃2

2022-09-13 09:18:12 字數 1276 閱讀 5542

投資問題:

問題描述:有m元錢,投資給n的專案,f(x): 將x元投入到第i個專案中的效益。求使得總效益最大的投資方案。(這道題太不容易了,這是我第一次沒有看答案做出了動態規劃的問題,應該是花了三個小時)。

建模:問題的解是向量

目標函式:max

對於子問題的劃分和計算順序:

k:考慮對於專案1,2,,,k的投資

x:總錢數不能超過x

原始輸入,k=n ,x=m

k=1到n

x=1到m

假設有乙個五萬元的可以投資在四個專案上面,投資回報**如下:

有關動態規劃初學者**心得:

1.對於動態規劃中的備忘錄,也就是所謂的儲存的資料結構經常會以矩陣的形式應用,有時輸入也會存在矩陣:

對於矩陣來講,最重要的:一定要搞清row和column的意義!一定要搞清row和column的意義!一定要搞清row和column的意義!重要的事情說三遍!!!

例如:在這個問題中變用於儲存子結果的矩陣dp[投資的金額][所投資的專案]

2. 初始化備忘錄的時候一定要加入之後進行計算時所有可能用到的專案,在此題中f(0)這一列也會在後面計算中用到所以要加入dp的備忘錄中

3. 狀態轉移方程不僅在數值上有存在關係,在備忘錄的下標中也存在關係:比如:max = dp[j-k][i-1]+item[k][i]

對於該問題的解法:

1.備忘錄表中有row行,column列,行代表投資的錢數,列代表總計需要投資的專案,總計row*column項

xk有x+1種可能的取值,計算f[k][x](2<=k<=n, 1<=x<=m)需要:

x+1次加法

x次比較

以下**為通過動態規劃生成的備忘錄: 

投資問題的動態規劃:

1.用兩個不同型別的引數界定子問題

2.列出優化函式的遞推方程以及初值

3.確定子問題計算順序

4.計算時間複雜度

演算法學習 動態規劃

動態規劃是解決多階段決策過程最優化的一種方法。對於離散問題,解析數學無法施展,動態規劃則成為非常有效的工具。兩個弱點 1.得出目標函式方程後,尚無統一的處理方法,必須根據具體問題的性質結合相應的數學技巧來求解 2.維數障礙。動態規劃模型的分類 根據決策過程的時間參量是離散的還是連續的變數 1.離散 ...

演算法學習 動態規劃實踐

完成日期 2017.10.26 1.實踐題目 數字三角形 2.問題描述 給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑 每一步可沿左斜線向下或右斜線向下 使該路徑經過的數字總和最大。3.演算法描述 1 首先該問題有最優子結構和重疊子問題的性質,因...

演算法學習08 動態規劃

遞迴問題 暴力遞迴轉換成動態規劃 動態規劃本身就是暴力遞迴的優化,是一種用空間換時間的策略 動態規劃 我們不知道怎麼計算n 但我們知道 n 與 n 1 之間存在一定關係n n n 1 得到遞推的狀態轉移公式.當暴力遞迴到頭得到0 1,得到base case,這樣得到了遞迴的方法.public sta...