題目:小兵向前衝
題目描述: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...