動態規劃筆記 二

2021-09-21 14:42:52 字數 1254 閱讀 4852

題目:小兵向前衝

題目描述:n*m的棋盤上,小兵要從左下角走到右上角,只能向上或則向右走,問由多少種走法。

#include

using

namespace std;

intforward

(int n,

int m)

if(n ==

1|| m ==1)

//條狀棋盤

return

forward

(n, m -1)

+forward

(n -

1, m)

;//4*4 <-- 4*3 || 3*4

}int

main()

要是小兵可以走兩步呢?

修改**:

return

forward

(n, m -1)

+forward

(n -

1, m)

+forward

(n, m -2)

+forward

(n -

2, m)

;//4*4 <-- 4*3 || 3*4 || 4*2 ||2*4

組合數的遞推公式

c (n

,m)=

c(n−

1,m−

1)+c

(n−1

,m

)c(n,m) = c(n-1,m-1) + c(n-1,m)

c(n,m)

=c(n

−1,m

−1)+

c(n−

1,m)

#include

using

namespace std;

intncr

(int n,

int m)

//組合數

if(m ==0)

return

ncr(n-

1,m-1)

+ncr

(n-1

,m);

}int

main()

可以模擬於棋盤,只可以往右上角走或者往上走,問有多種解法。這就是組合數的物理意義。要是(n,m)這個格仔不能走呢?那直接讓f(n

,m)=

0f(n,m)=0

f(n,m)=0。

動態規劃(二)

本節實現乙個動態規劃問題實現。具體問題見上一節 的第三個栗子。這裡再次簡述 在乙個時刻系統可以觀察到的有兩個量 剩餘資料報數量m以及通道狀態h。因此我們將二者聯合組成系統狀態 m,h 那麼在每乙個時隙系統總共有2 m 1 個狀態。每乙個狀態可能跳轉到下乙個時隙的某乙個或者一些狀態。跳轉判斷條件有 在...

動態規劃(二)

之前的兩個問題都是用動態規劃方法解決的,那麼什麼情況下需要使用動態規劃呢?適應動態規劃方法求解的最優化問題應該具備的兩個要素 最優子結構和子問題重疊。用動態規劃方法求解最優化問題的第一步就是刻畫最優解的結構。如果乙個問題的最優解包含其子問題的最優解,就稱此問題具有最優子結構性質。使用動態規劃方法時,...

動態規劃(二)

矩陣鏈乘法問題 給定n個矩陣的鏈,矩陣ai的規模為p i 1 pi 1 i n 求完全括號化方案,使得計算乘積a1a2.an所需標量乘法次數最少。比如矩陣鏈相乘,不同的加括號方式會導致不同的計算代價。假定三個矩陣的規模為10 100 100 5 5 50。若按 a1a2 a3 計算,a1a2需要做1...