AT_ahc049_a [AHC049A] Durability-Constrained Transport

题目背景

AtCoder社は、新しいオフィスへ移転することにした。 コストを抑えるため、引っ越し業者には頼らず、高橋社長自ら荷物の運び出しを行うことになった。 旧オフィス内には大量のダンボール箱が平積みされており、それらをすべて出入り口まで運び出す必要がある。 ダンボール箱は積み重ねて複数同時に運ぶことができるが、重ねすぎると重さに耐えきれず潰れてしまう可能性がある。 できるだけ少ない移動回数で、すべての箱を無事に運び出す方法を考えてほしい。

题目描述

有一个 $N \times N$ 的办公室。左上角的格子的坐标为 $(0, 0)$,向下走 $i$,向右走 $j$ 的位置坐标为 $(i, j)$。格子 $(0, 0)$ 是办公室的出入口。 初始状态下,除出入口外的所有格子上都各放有一个纸箱。每个纸箱有两个属性:**重量** 和 **耐久力**。位于格子 $(i, j)$ 的纸箱重量为 $w_{i,j}$,耐久力为 $d_{i,j}$。 纸箱可以上下叠放,这样可以一次搬运多个纸箱。高桥社长的目标是从初始位置 $(0,0)$ 出发,反复进行如下操作,将所有纸箱搬出办公室: 1. 拿起当前位置的纸箱。如果已经拿着纸箱,则把新纸箱放在最上面。如果当前位置没有纸箱,则无法进行此操作。 2. 将手中最上面的纸箱放在当前位置。如果当前位置已经有纸箱,则无法进行此操作。 3. 向上下左右相邻的格子移动。可以移动到有纸箱的格子,但不能走出办公室(即不能超出 $N \times N$ 的范围)。 高桥社长力气很大,可以一次拿任意重的纸箱。然而,手中纸箱的耐久力会在每次移动(操作3)时减少。耐久力降到 $0$ 或以下的纸箱会被压坏,判定为 WA。 耐久力的减少量等于该纸箱上方所有纸箱的总重量。也就是说,假设手中纸箱从下到上的重量为 $w_1, w_2, \ldots, w_n$,那么从下往上第 $i$ 个纸箱每次移动时耐久力减少 $\sum_{j=i+1}^n w_j$。 只有在移动(操作3)时耐久力才会减少,操作1和操作2不会影响耐久力。操作2放下纸箱后,耐久力不会恢复。 每当通过操作3回到出入口 $(0,0)$ 时,手中所有纸箱都会被搬出办公室。 最多可以进行 $2\times N^3$ 次操作。请尽量用最少的移动次数将所有纸箱搬出办公室。

输入格式

输入通过标准输入给出,格式如下: > $N$ $w_{0,0}$ $\cdots$ $w_{0,N-1}$ > $\vdots$ > $w_{N-1,0}$ $\cdots$ $w_{N-1,N-1}$ > $d_{0,0}$ $\cdots$ $d_{0,N-1}$ > $\vdots$ > $d_{N-1,0}$ $\cdots$ $d_{N-1,N-1}$ - 所有测试用例中,$N=20$。 - $w_{i,j}$ 表示格子 $(i, j)$ 上纸箱的重量。$(0,0)$ 没有纸箱,所以 $w_{0,0}=0$,其余格子满足 $1 \leq w_{i,j} \leq 10^3$。 - $d_{i,j}$ 表示格子 $(i, j)$ 上纸箱的耐久力。$(0,0)$ 的 $d_{0,0}=0$,其余格子满足 $10 \leq d_{i,j} \leq 3\times 10^4$。

输出格式

第 $t$ 步的操作用一个字符 $a_t$ 表示,具体如下: 1. 执行操作1时:`1` 2. 执行操作2时:`2` 3. 执行操作3时:根据移动方向,上:`U`,下:`D`,左:`L`,右:`R` 设操作总数为 $L$,请按如下格式输出: > $a_0$ > $\vdots$ > $a_{L-1}$ [查看示例](https://img.atcoder.jp/ahc049/LDUZCjLO.html?lang=ja&seed=0&output=sample)

说明/提示

## 故事背景 AtCoder 公司决定搬到新办公室。为了节省成本,没有请搬家公司,而是由高桥社长亲自搬运所有物品。 旧办公室里堆满了纸箱,需要全部搬到出入口。纸箱可以叠放一起搬,但叠得太高会压坏下面的纸箱。 请思考如何用尽量少的移动次数,安全地将所有纸箱搬出。 ## 得分 设操作3(移动)的次数为 $T$,办公室内剩余纸箱数为 $R$,则得分如下: - 若 $R>0$,得分为 $N^2-R$。 - 若 $R=0$,得分为 $N^2+2\times N^3-T$。 其中 $T$ 只统计操作3(移动)的次数,操作1(拿起)和操作2(放下)不计入 $T$。但所有操作总数不得超过 $2\times N^3$。 总共有 150 个测试用例,所有测试用例得分之和为最终得分。若有任意测试用例输出不合法或超时,整份提交判为 WA 或 TLE。最终排名以比赛期间最高得分为准,赛后不再进行系统测试。得分相同者排名并列。 ## 输入生成方法 - $\mathrm{rand\_double}(L,U)$:在 $[L, U]$ 区间内均匀随机生成实数。 ### $w$ 的生成 对除 $(0,0)$ 外的每个格子 $(i,j)$,$w_{i,j} = \mathrm{round}(\mathrm{rand\_double}(1, \sqrt{1000})^2)$。 ### $d$ 的生成 对除 $(0,0)$ 外的每个格子 $(i,j)$,$d_{i,j} = \mathrm{round}(w_{i,j} \times \mathrm{rand\_double}(10, 30))$。 ## 工具(输入生成器与可视化工具) - [网页版](https://img.atcoder.jp/ahc049/LDUZCjLO.html?lang=ja):功能更强,支持动画和手动操作。 - [本地版](https://img.atcoder.jp/ahc049/LDUZCjLO.zip):需安装 [Rust 语言](https://www.rust-lang.org/ja) 编译环境。 - [Windows 版编译好的可执行文件](https://img.atcoder.jp/ahc049/LDUZCjLO_windows.zip):不想搭建 Rust 环境可用此版本。 比赛期间禁止分享可视化结果、解法或思路。请注意遵守规则。 由 ChatGPT 4.1 翻译