Delannoy 数
Delannoy 数是一种组合数,用来计算在一个矩形网格中,从起点走到终点的所有路径数。它的独特之处在于允许三种移动方式。
在整数网格上,从原点 \((0,0)\) 走到点 \((m,n)\),每一步可以:
- 向右走一步:\((x,y) \to (x+1,y)\)。
- 向上走一步:\((x,y) \to (x,y+1)\)。
- 向右上走一步:\((x,y) \to (x+1,y+1)\)。
走法总数记为 \(D(m,n)\),就是 Delannoy 数。
显然 \(D(m,n)\) 是可以通过递推得到的,但是时间复杂度为 \(O(mn)\)。
但是 Delannoy 数有一个通项公式:
\[D(m,n) = \sum_{k = 0}^{min(m,n)} \binom{m}{k} \binom{n}{k} 2^k
\]
感性理解:如果决定在路径中走 \(k\) 步对角线,那么就要从横向步数中选 \(k\) 步,从纵向步数中也选 \(k\) 步,与这 \(k\) 步对角线合并。而每一个对角线步,都可以看作先横后纵或先纵后横,所以乘上 \(2^k\)。
于是我们就可以预处理组合数和 \(2\) 的幂次,然后直接计算,时间复杂度 \(O(\min(m,n))\)。

浙公网安备 33010602011771号