iT邦幫忙

2026 iThome 鐵人賽

DAY 29
1
Software Development

快樂演算法系列 第 29

third training 但還是謹慎起見不要跑爆了 & 62 retrieval

  • 分享至 

  • xImage
  •  

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


上一篇
蘿蔔1 2 1again :“( & 類別轉換 & 62 v2
下一篇
6000 Ada third training 還是很爛 & 56 & 準備回頭記憶
系列文
快樂演算法30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
AndyAWD
iT邦研究生 5 級 ‧ 2026-09-18 00:06:23

最後一天!

正要準備嗚嗚我是最後一名

我要留言

立即登入留言