P15744 [JAG 2024 Summer Camp #3] Renovation

题目描述

Jack 计划翻新他的房子,以使得他的房间尽可能大。然而,由于 Jack 没有太多钱,他希望以最小的努力创建一个宽敞的房间。 Jack 的房子用一个高度为 $H$、宽度为 $W$ 的网格表示。网格中的每个单元格处于以下状态之一: - **.** :地板,Jack 可以自由通过。 - **#** :墙壁,Jack 无法通过。 - **S** :Jack 当前所在的位置,也是一个地板单元格。 Jack 可以移动到网格中相邻(上、下、左、右)的地板单元格。他不能移动到房子的边界之外。 在这次翻新中,Jack 可以破坏至多一面墙,将其变为地板。确定在做出这一改变后,Jack 从当前位置能够到达的最大单元格数量。

输入格式

输入包含一个单独的测试用例,格式如下: $$ \begin{aligned} & H \ W \\ & l_{1} \\ & l_{2} \\ & \vdots \\ & l_{H} \end{aligned} $$ 第一行包含两个整数 $H$ 和 $W$,分别表示网格的高度和宽度。$H$ 和 $W$ 均在 $2$ 到 $500$ 之间(含端点)。 接下来的 $H$ 行每行包含一个长度为 $W$ 的字符串,表示网格。每个字符串 $l_{i}$ 由字符 `.`(地板)、`#`(墙壁)和 `S`(Jack 的起始位置)组成。保证网格中恰好包含一个 `S`。

输出格式

输出一个整数,表示 Jack 在可选地破坏一面墙后,从起始位置能够到达的最大单元格数量。

说明/提示

翻译由 DeepSeek V3.2 完成