Description
现在有一个机器人,最初站在 $n \times m\ (1 \leq n,m\leq 1000)$ 矩阵中的 $(x,y)\ (1 \leq x \leq n, 1\leq y \leq m)$ 位置。每次它会等概率的选择 原地不动,向左移动,向右移动,向下移动 四种操作。当然,机器人在第 $1$ 列时不会选择向左移动,第 $m$ 列时不会选择向右移动。求机器人到达第 $n$ 行的期望步数,至少精确到 $10^{-4}$ 。
Source
Solution
前置知识:
高斯(Gauss)消元
求期望步数,很容易想到 期望DP 。我们用 $f_{i,j}$ 表示从 $(i,j)$ 走到最后一行的期望步数,那么初始状态就是 $f_{n,i} = 0\ (1 \leq i \leq m)$(从最后一行走到最后一行的期望步数为 $0$),要求的答案就是 $f_{x,y}$(根据状态即能得到),状态转移方程如下(分 $3$ 种情况讨论):
值得注意的是:$m = 1$ 时比较特殊,因为不能向左和向右移动,此时
这个转移方程是倒推的,并且有后效性,所以不能直接转移。在求 $f_{i,j}$ 时,$f_{i+1,j}$ 是 已知 的,而 $f_{i,j-1},f_{i,j},f_{i,j+1}$ 都是 未知 的,我们把未知量移到左边,把已知量移到右边,可以得到:
同理,$m = 1$ 时,
我们会发现一共有 $m$ 个未知数和 $m$ 个方程,很容易想到 高斯消元 求解未知量 $f_{i,1} \sim f_{i,m}\ (1 \leq i < n)$ 。
比如说,当 $m = 5$ 时,所构成的矩阵就是:
本来 高斯消元 的时间复杂度应该是 $O(n^3)$ 的。但是观察矩阵能够发现,其实这是一个稀疏矩阵,未知数全部集中在对角线上,$0$ 的地方不需要消元,我们需要消元的只有 $m - 1$ 个数(上图 $\color{red}{红色}$ 的数字),回带时原方程中也只需要消去 $m - 1$ 个数(上图 $\color{blue}{蓝色}$ 的数字),所以本题中 高斯消元 时间复杂度为 $O(m)$ 。总时间复杂度为 $O(nm)$ 。
Code
1 |
|