前言
聽說把枕頭哭溼,晚上可以夢見大海
先說明一下情況。
我 \(\text{T2}\),同樣的資料,本地 \(\text{500ms}\to\) \(\text{sxyz: }1.7\texttt{s}\)。
\(\text{T3}, \text{CF 3s}\) 的時限,什麼爛機子開 \(\text{1s}\)。
我們都有光明的未來。
我儘量剋制住自己的情緒。
B / ABC176F
很智慧的一道題,稍微總結一下。
首先你顯然有 \(dp_{i,j,k}\) 表示經過 \(i\) 次操作,前面剩下一個 \(j\) 一個 \(k\) 可以得到的最大分數。
暴力轉移其實是比較簡單的,假設這一次操作除了 \(j,k\) 另外三個數是 \(a,b,c\)。
-
把 \(a,b,c\) 刪掉,\(dp_{i,j,k}=dp_{i-1,j,k}+[a=b=c]\)。
-
把 \(a,b,c\) 中的兩個和 \(j,k\) 中的一個刪掉,不妨設我們刪的是 \(a,b,j\),\(dp_{i,c,k}=dp_{i-1,j,k}+[a=b=j]\)。
-
把 \(a,b,c\) 中的一個和 \(j,k\) 刪掉,不妨設我們刪的是 \(a,j,k\),\(dp_{i,b,c}=dp_{i-1,j,k}+[a=j=k]\)。
觀察到第一種轉移可以看作是全域性加 \([a=b=c]\) 可以直接寫一個全域性增量標記在前面,最後答案直接 \(\text{ans}+\text{add}\) 即可。
至於後面兩個,觀察到變化的狀態只有 \(\mathcal{O}(n)\) 個。並且變化一定是變大(因為有第一種轉移的存在)
故你考慮把所有變化狀態暴力取出來,然後維護一些最大值陣列即可。
由於你每次只改變了那些會改變的,故總複雜度 \(\mathcal{O}(n^2)\)
很難崩的是,這個題你一旦常數大了一點你就會喜提 \(\text{TLE 95}\)。
\(\text{My Submission.}\)
C / CF407D
\(\texttt{2700}\) 的題,但是感覺又不完全算的上。
題解非常清晰明瞭,這裡懶得講了,講一下自己的巨噁心做法。
為了將這個做法最佳化到 \(\mathcal{O}(n^3)\) 我也是煞費苦心了。
說實話這個做法真的挺難有語言描述的。
首先你考慮維護一個 \(\text{num}_{i,l,r}\),表示對於第 \(i\) 行,找到最小的 \(j\ge i\),存在一個數 \(k_1,k_2\in[l,r]\),滿足 \(a_{i,k_1}=a_{j,k_2}\)。