Color Rows and Columns

Yorg發表於2024-11-30

演算法

題意很明確了, 考慮單個矩形

我們注意到, 當選擇 \(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)\)

程式碼

沒有實現難度, 不想寫

總結

考慮找到最小分割的特殊性質在處理

善於轉化問題

相關文章