P17755 「RSOI-3D」赛车游戏 / racing

题目背景

题目来源:【HT-126-Div.3】核桃 CSP-J 组模拟赛

题目描述

小 R 正在玩一款赛车游戏。 这款赛车游戏的地图可以被描述为一个 $n\times m$ 的字符网格,其中网格的每一个字符都是 `01#` 三个字符中的一个。每种字符的意义如下: - `0`:公路,经过这个字符不会产生任何代价。 - `1`:草地,经过这个字符会扣除车的 $1$ 格耐久,具体见下文。 - `#`:障碍,经过这个字符会使你输掉游戏。 现在小 R 在 $(x_0,y_0)$ 的地方开始了游戏。他需要依次到达 $k$ 个检查点 $(x_1,y_1),(x_2,y_2),\cdots,(x_k,y_k)$。到达 $(x_k,y_k)$ 时游戏结束。 小 R 使用的是游戏内最新款的赛车。这款赛车有一个神奇的特性:**它至多只能转向 $t$ 次**。 初始时,小 R 的车有 $10^9$ 格耐久。现在小 R 想在依次到达所有检查点且不输掉游戏的情况下最大化车的耐久。当然,小 R 可能无法完成游戏,此时你只需输出 `-1`。 注意,如果经过了同一格草地多次,那么耐久仍然会被扣除多次。

输入格式

第一行四个整数 $n,m,k,t$。 接下来 $n$ 行,每行 $m$ 个字符描述棋盘。 接下来一行两个整数 $x_0,y_0$。 接下来 $k$ 行,第 $i$ 行两个整数 $x_i,y_i$。

输出格式

一行一个整数,表示游戏结束时车的耐久的最大值。无解输出 `-1`。

说明/提示

**【样例 #1 解释】** 显然完成这个地图至少需要 $2$ 次转向,但是小 R 的车最多只能转向 $1$ 次,故不可能。 **【样例 2 解释】** ![](https://cdn.luogu.com.cn/upload/image_hosting/6vmvm32o.png) 如图是一种需要 $2$ 次转向的最优解。其中: - 绿色 S:表示起点 - 橙色数字:表示检查点 - 白色数字:表示经过的草地。 **【样例 3 解释】** ![](https://cdn.luogu.com.cn/upload/image_hosting/p3cdlnbl.png) 如图是一种需要 $1$ 次转向的最优解。图示和上一个解释相同。 注意,如果经过了同一格草地多次,那么耐久仍然会被扣除多次。 **【样例 4 解释】** ![](https://cdn.luogu.com.cn/upload/image_hosting/v5478oyg.png) 如图是一种需要 $7$ 次转向的最优解。图示和前面两个的样例解释相同。 **【数据范围】** 对于所有测试数据,保证:$1\le n,m \le 50,0\le t \le 100, 1\le k \le 10$,$(x_i,y_i)\neq(x_{i+1},y_{i+1})$。 所有检查点都不是 `#`,保证 $(x_0,y_0)$ 为 `0`。 | 子任务编号 | $n,m\le$ | $t\le$ |特殊性质 |分值 | |:-:|:-:|:-:|:-:|:-:| | 1 | $5$ | $10$ |无 | $10$ | | 2 | $20$ | $50$ | 无 | $15$ | | 3 | ^ | ^ | 除 $(x_0,y_0)$ 外,网格全为字符 `1` | $5$ | | 4 | ^ | ^ | 网格全为字符 `0` | $5$ | | 5 | ^ | ^ | 网格没有字符 `#` | $10$ | | 6 | $50$ | $100$ | $n=1$ | $10$ | | 7 | ^ | ^ | $k=1$ | $15$ | | 8 | ^ | $0$ | 无 | $5$ | | 9 | ^ | $100$ | 无 | $25$ |