演算法
題意很明確了, 考慮單個矩形
我們注意到, 當選擇 \(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)\)
程式碼
沒有實現難度, 不想寫
總結
考慮找到最小分割的特殊性質在處理
善於轉化問題