P16636 [GKS 2017 #G] Matrix Cutting
题目描述
Shekhu 教授有一个 $N$ 行 $M$ 列的矩阵,行从上到下编号为 $0$ 到 $N-1$,列从左到右编号为 $0$ 到 $M-1$。矩阵的每个格子包含一个正整数。
他希望通过水平切割和垂直切割,将这个矩阵切成 $N \times M$ 个子矩阵(每个大小为 $1 \times 1$)。切割只能在两行或两列之间的边界上进行。
Shekhu 教授邀请他最好的学生 Akki 来完成这项工作,并提出了一个有趣的方案。每次 Akki 在一个子矩阵上进行切割之前,他会获得与该子矩阵中最小值相等数量的金币。注意,每次切割会使子矩阵的总数增加。此外,在不同子矩阵中的切割是相互独立的,Akki 在不同子矩阵中的切割所获得的金币也是独立计算的。
现在,Akki 有多种方式进行切割。你能帮助他最大化他能获得的金币总数吗?
输入格式
输入的第一行包含一个整数 $T$,表示测试用例的数量。接下来有 $T$ 个测试用例。
每个测试用例的第一行包含两个整数 $N$ 和 $M$,含义如上所述。
接下来有 $N$ 行,每行包含 $M$ 个正整数,描述矩阵。
输出格式
对于每个测试用例,输出一行,格式为 `Case #x: y`,其中 $x$ 是测试用例编号(从 $1$ 开始),$y$ 是 Akki 以最优顺序进行切割时能获得的最大可能金币数。
说明/提示
在样例 $1$ 中,Akki 有两种可能的切割方式。
1. 假设 Akki 先水平切割矩阵。他获得矩阵中的最小值 $1$ 个金币。然后他需要在两个子矩阵($[1, 2]$ 和 $[3, 4]$)中进行垂直切割,分别获得 $1$ 和 $3$ 个金币。
2. 假设 Akki 先垂直切割矩阵。他获得矩阵中的最小值 $1$ 个金币。然后他需要在两个子矩阵(其转置为 $[1, 3]$ 和 $[2, 4]$)中进行水平切割,分别获得 $1$ 和 $2$ 个金币。
第一种策略更好,答案为 $5$。
在样例 $2$ 中,Akki 最多可以获得 $7$ 个金币。一种最优方式是:先进行唯一的水平切割,获得 $1$ 个金币。然后,在上子矩阵 $[1, 2, 1]$ 中,Akki 可以先在第一列右侧立即切割,再在第二列右侧立即切割,共获得 $2$ 个金币。类似地,在下子矩阵 $[2, 3, 2]$ 中,Akki 可以先在第二列右侧立即切割,再在第一列右侧立即切割,共获得 $4$ 个金币。
在样例 $3$ 中,只需要进行一次切割。
### 限制条件
$1 \le T \le 100$。
矩阵中的每个值 $\le 10^5$。
**小数据集(测试集 1 – 可见)**
$N = 1$。
$1 \le M \le 10$。
**大数据集(测试集 2 – 隐藏)**
$1 \le N \le 40$。
$1 \le M \le 40$。
翻译由 DeepSeek V4 Pro 完成