NOIP集訓Day24 DP常見模型3 - 區間

Leirt_Abu發表於2024-09-06

NOIP集訓Day24 DP常見模型3 - 區間

A. [CF1572C] Paint

\(f_{i, j}\) 表示區間 \([i, j]\) 塗成一種顏色的最小染色次數。可以發現對於區間 \([i, j]\),一定有一個最優方案使得整個區間最後染色成 \(a_j\)。這是因為 \(j\) 在區間 \([i, j]\) 的邊緣,一定存在一個 \(k\in [i, j - 1]\),使得先將 \([k, j - 1]\) 染成一個個顏色,然後將 \([k, j]\) 統一顏色,再將 \([i, j]\) 統一顏色。如果 \([k, j - 1]\) 按照一種最優方案染完色後與 \(a_j\) 的顏色不同,則要使整個區間顏色相同,只要讓 \(j\) 或者 \([k, j - 1]\) 整體變顏色,而無論變成什麼顏色,必然使用一次染色,故選擇將區間 \([k, j]\) 染成 \(a_j\),同理,將 \([i, k - 1]\)\([k, j]\) 顏色統一時,都將他們染成 \(a_j\) 也是不劣的。

所以將 \(f_{i, j}\) 重新定義為:將 \([i, j]\) 塗成 \(a_j\) 時的最小染色次數。

則有轉移:\(f_{i, j} = \min(f_{i, j - 1} + [a_{j - 1}\ne a_j],\min\limits_{i + 1\le k \le j - 2} (f_{i, k} + f_{k + 1, j} + [a_k \ne a_j]))\)\(f_{i, i} = 0\)

時間複雜度 \(\Theta(n^3)\),顯然 TLE。

題目中還有一句話:每種顏色最多出現 \(20\) 次。

進一步考慮,對於 \([i, j]\) 中的決策點 \(k\),總存在一個決策點有 \(a_k = a_j\) 的性質。

證明:將 \([i, j]\) 劃分成若干個小區間 \([i, k_1], [k_1 + 1, k_2],\dots,[k_m + 1, j]\),顯然這些區間合併時不需要額外使用一次染色,而若再將其中國的一個區間拆開作為決策點,那麼會少一次將左半部分染成 \(a_j\) 的操作,多一次將決策點左右兩部分顏色統一的染色操作,所以這樣做是不劣的。所以,在列舉 \(k\) 時,只需列舉 \(a_k = a_j\) 的那一部分就好了。

時間複雜度 \(\Theta(20\times n^2)\)


相關文章