AT_codefestival_2016_qualC_d Friction

题目描述

高桥君的房间里有一个由 $H$ 行 $W$ 列、共 $H \times W$ 个方块组成的物体。每个方块都有颜色,颜色用小写英文字母(`a`-`z`)表示。从上往下第 $i$ 行,从左往右第 $j$ 列的方块颜色为 $c_{i,j}$。 由于这个物体看起来不太美观,高桥君打算将其拆解。拆解操作如下: - 从 $W$ 列中选择一列,将该列下沉一格。该列最底部的方块会消失。 由于相同颜色的方块之间有吸引力,这个操作的代价为“所选列的方块与(操作前)左右相邻方块中,颜色相同的方块数量”。 高桥君需要通过 $H \times W$ 次操作将所有方块消除并拆解这个物体。请通过合理选择每次操作的列的顺序,使得拆解的总代价最小。

输入格式

输入通过标准输入给出,格式如下: > $H$ $W$ > $c_{1,1}c_{1,2}\ldots c_{1,W}$ > $c_{2,1}c_{2,2}\ldots c_{2,W}$ > $\vdots$ > $c_{H,1}c_{H,2}\ldots c_{H,W}$

输出格式

输出拆解所需总代价的最小值。

说明/提示

## 限制条件 - $1 \leq H \leq 300$ - $2 \leq W \leq 300$ - $c_{i,j}$ 为小写英文字母(`a`-`z`) ## 部分得分 - 对于 $W=3$ 的数据集,答对可得 $300$ 分。 ## 样例解释 1 例如,按照下图的顺序操作,总代价可以做到 $2$,这是最小值。 ![](https://atcoder.jp/img/code-festival-2016-qualc/c116dab4c0a2f42759c6476d95330a37.png) ## 样例解释 2 先将中间的列全部下沉,再将左边的列全部下沉,最后将右边的列全部下沉,可以实现总代价 $0$。 ## 样例解释 3 先将右边的列下沉一格→左边的列下沉一格→右边的列全部下沉→左边的列全部下沉,这样也可以实现总代价 $0$。 由 ChatGPT 4.1 翻译