ABC332
我们可以把矩阵 \(\text{A}\) 看成 \({p,q}\)。
\(p\) 指现在一行最开始在哪里,\(q\) 指现在这一列最开始在哪里。
于是我们枚举 \(p\) 和 \(q\) 所有可能的情况,如果修改后的 \(\text{A}\) 和 \(\text{B}\) 一样,那么就可以直接统计答案。
考虑 dp。
定义 \(dp_{S,i}\) 为当前状态为 \(S\) 分成了 \(i\) 个福袋的答案。
考虑怎么转移。
如果 \(T\) 为 \(S\) 的子集,那么 \(C_sT\) 就可以形成另一个福袋。
所以就有 dp 式了。
\[dp_{S,i} = \min_{T\subseteq S} dp_{S-T,i-1} + dp_{T,1}
\]
于是问题就变成了如何求 \(dp_{T,1}\)。其实这个问题非常简单。直接把取到的所有数相加,减去平均值再除以 \(D\) 即可。