P12722 [KOI 2021 Round 2] 计算机器人

题目背景

试题来源:。中文翻译做了少量本土化修改。 按照[署名—非商业性使用—相同方式共享 4.0 协议国际版](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans)进行授权。

题目描述

在一个由 $M$ 行(横向)和 $N$ 列(纵向)组成的网格中,每一个格子里都有一个机器人。 每一行从上到下依次编号为 1 到 $M$,每一列从左到右依次编号为 1 到 $N$。通过这些编号,我们可以使用坐标 $(行\ 编号,\ 列\ 编号)$ 来表示网格中的格子位置。 每个机器人都有一个或多个输入值、一个存储值和一个输出值。 机器人的运作方式如下:从最左边一列的机器人开始,按列编号顺序依次运作。处于同一列中的机器人会同时运行。 机器人的行为如下(表达式 $|A|$ 表示整数 $A$ 的绝对值,即当 $A \geq 0$ 时 $|A| = A$,当 $A < 0$ 时 $|A| = -A$): - 最左边一列的机器人,其输入值仅为一个 $0$。 - 坐标为 $(i, j)$ 的机器人的输入值,是所有满足 $|i - a| \leq j - b$ 且 $b < j$ 的坐标 $(a, b)$ 的机器人们的输出值。 ![](https://cdn.luogu.com.cn/upload/image_hosting/dzkat7m1.png) - 每个机器人将其所有输入值中的最大值,作为自己的存储值。 - 每个机器人将自己的存储值加上自己的权重 $D_{i,j}$,并将所得值作为其输出值。 请编写一个程序,读取机器人的权重信息,计算所有机器人的存储值中的最大值(即最大存储值)。

输入格式

第一行包含两个整数 $M$ 和 $N$,中间用一个空格分隔。 接下来的 $M$ 行,每行包含一个长度为 $N$ 的字符串,表示对应行的每个机器人的权重。每个字符为一个数字,表示该格子中机器人的权重 $D_{i,j}$。

输出格式

输出一行,即所有机器人存储值中的最大值。

说明/提示

**约束条件** - $1 \leq M \leq 2000$ - $1 \leq N \leq 2000$ - 对于所有满足 $1 \leq i \leq M$ 且 $1 \leq j \leq N$ 的 $(i,j)$,都有 $1 \leq D_{i,j} \leq 9$ **子任务** 1. (3 分)$N = 1$ 2. (8 分)$N = 2$ 3. (9 分)$M = 1$ 4. (21 分)$M \leq 100$ 且 $N \leq 100$ 5. (59 分)无额外约束条件