1. 程式人生 > 其它 >【做題記錄】計數 DP

【做題記錄】計數 DP

(直播賀題)

\(\text{Gerald and Giant Chess}\)

假設有一個 \(h\)\(w\) 列的棋盤,棋盤上的格子有的是可以經過的,有的是不可以經過的。一開始在棋盤的左上角(第一行第一列)有一顆棋子,這顆棋子每次只能往右或者往下移動一格。那麼要將其從起點移動到右下角 \((h,w)\) 一共有多少種移法?

無限制下,從點 \((x_1,y_1)\) 向下或向右移動到 \((x_2,y_2)\) 的方案與在長度 \(x_2-x_1+y_2-y_1\) 的序列中放 \(x_2-x_1\)\(0\)\(y_2-y_1\)\(1\) 的方案存在一一對映,即向下對應 \(0\)

,向右對應 \(1\)。因此方案數為 \(\binom{x_2-x_1+y_2-y_1}{x_2-x_1}\)

考慮每個非法的方案,對應一個最先經過的黑點,因此考慮在第一次經過某個黑點時計數。定義狀態 \(dp_i\) 代表目前在黑點 \(i\) 且以前未經過其它黑點的方案數,用總方案減去非法方案,而方案對應著最先經過的黑點,因此有轉移方程

\[dp_i=\binom{x_i-x_0+y_i-y_0}{x_i-x_0}-\sum_{x_j\le x_i\land y_j\le y_i}\binom{x_i-x_j+y_i-y_j}{x_i-x_j}dp_j \]

\(\square\)

\(\text{Roman and Numbers}\)

\(x\) 被視作接近於數 \(n\)\(m\) 取模,當滿足條件:

  • 它可以通過數 \(n\) 的數字重新排列而得到;
  • 它沒有任何的前導 \(0\)
  • \(x\)\(m\) 除的餘數等於 \(0\)

找出有多少個數接近於 \(n\)\(m\) 取模。