CF1209E2 Rotate Columns (hard version)

题目描述

这是该问题的更难版本,区别仅在于约束条件不同。 给定一个 $n \times m$ 的矩阵 $a$。每次操作,你可以选择任意一列,并将该列的元素循环移动(即将该列的元素向下移动一格,最底部的元素移动到最顶部)。你可以对任意一列进行任意次数(包括零次)这样的操作,也可以对同一列多次操作。 完成所有循环移动后,对于每一行,计算该行中的最大值。设第 $i$ 行的最大值为 $r_i$。请问 $r_1 + r_2 + \ldots + r_n$ 的最大可能值是多少?

输入格式

第一行包含一个整数 $t$($1 \le t \le 40$),表示测试用例的数量。 每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n \le 12$,$1 \le m \le 2000$),分别表示矩阵 $a$ 的行数和列数。 接下来的 $n$ 行,每行包含 $m$ 个整数,表示矩阵 $a$ 的元素($1 \le a_{i, j} \le 10^5$)。

输出格式

输出 $t$ 个整数,按输入顺序分别表示每个测试用例的答案。

说明/提示

在第一个测试用例中,你可以将第三列向下循环移动一次,这样可以得到 $r_1 = 5$,$r_2 = 7$。 在第二个测试用例中,你可以不进行任何旋转,此时 $r_1 = r_2 = 10$,$r_3 = 9$。 由 ChatGPT 4.1 翻译