DP算目前這格,只需上+左格的答案
上
↓
左 → 現在
從上面往下來;從左邊往右來
DP把Grid的格子逐格算到右下;Combination用整體規律
m = rows(列,上下);n = columns(欄,左右)
C((m-1)+(n-1), m-1)=C(m+n-2, n-1)
總步數固定,只要決定「↓ 放在哪些位置」即可;反過來選「→ 放在哪些位置」也一樣。
C(4,2)= 4!/(2! 2!)
因4步裡2↓2→四個東西都當成不同但
兩個↓一樣,交換位置不會產生新路徑,所以除掉2!
兩個→也一樣,再除:2!
總步數固定;↓ 都一樣、→ 都一樣,所以是重複排列,也等價於從總步數中選出哪些位置放 ↓:C(m+n-2, m-1)。
DP Combinatorics
m=3, n=3
每格=上+左 ↓要走 m-1=2 次
1 1 1 → 要走 n-1=2 次
1 2 3 總步數 2+2=4
1 3 6 從 4 個位置選 2 個放 ↓
最後得到 6 C(4,2)=6
逐格算 直接算數學公式
O(mn) O(min(m,n))
(m+n-2)!
────────────────
(m-1)! × (n-1)!
速算 C(4,2):answer = answer * (total - i + 1) / i;
! 只代表「階乘 factorial」,非組合
組合是整個公式啦就是C;組合公式裡會用階乘來計算
i = 1;total - i + 1 = 4 - 1 + 1 = 4
分母 i = 1→ ×4 ÷1
i = 2;total - i + 1 = 4 - 2 + 1 = 3
分母 i = 2→ ×3 ÷2
8.total - i + 1 負責讓分子 4、3、2…往下降;i 負責讓分母 1、2、3…往上升。
i = 1:乘 total ÷ 1
i = 2:乘 total - 1 ÷ 2
i = 3:乘 total - 2 ÷ 3