算法
题意很明确了, 考虑单个矩形
我们注意到, 当选择 \(i\) 个横行时, 下一次选择纵列的代价可以减少 \(i\) , 同理, 当选择 \(j\) 个纵列时, 下一次选择横行的代价可以减少 \(j\)
这里有一个很好的性质, 对于单个矩阵, 贪心是正确的, 具体的, 每次贪心的选择代价最少的情况即可
那么我们就可以处理出, 对于第 \(i\) 个矩阵, 要想拿到 \(p\) 分时最少需要多少次操作, 记为 \(V_{i, p}\) (\(\rm{VIP}\) 没崩住) , 预处理时间复杂度 \(\mathcal{O}(n \omega)\) , 其中 \(\displaystyle\omega \leq \max_{i = 1}^{n} (a_i + b_i)\)
那么问题就好处理了, 考虑令 \(f_{i, j}\) 表示考虑了前 \(i\) 个矩阵, 拿到了 \(j\) 分的最小操作数, 有,
\[\begin{cases}
f_{i, j} \stackrel{\min}{\longleftarrow} f_{i - 1, j} \\
f_{i, j} \stackrel{\min}{\longleftarrow} f_{i - 1, j - p} + V_{i, p}
\end{cases}
\]
复杂度 \(\mathcal{O} (nk\omega)\) , 其中 \(\displaystyle\omega \leq \max_{i = 1}^{n} (a_i + b_i)\)
代码
没有实现难度, 不想写
总结
考虑找到最小分割的特殊性质在处理
善于转化问题