1. 程式人生 > 其它 >Atcoder Educational DP Contest 選做

Atcoder Educational DP Contest 選做

頹瘋了,來做點題恢復一下狀態。

頹瘋了,來做點題恢復一下狀態。

刷水題了!!!

Educational DP Contest

更好的閱讀體驗

J Sushi

\(f_{a,b,c}\)\(1\) 個壽司的盤子有 \(a\) 個,\(2\) 個壽司的盤子有 \(b\) 個,\(3\) 個壽司的盤子有 \(c\) 個的期望步數。

轉移就列舉第一次選中了哪一種壽司,乘個選擇的概率,加上個 \(\frac{n}{a+b+c}\) 即可。

有一說一我差點沒寫出來。

AC

O Matching

\(f_S\) 為考慮了 \(1,2,\cdots,\text{popcount}(S)\) 內所有左部點,他們匹配的右部點集合為 \(S\)

的方案數,直接列舉 \(S\) 最低位匹配的位置轉移就好了。

還算得上有一點技巧性?

AC

Q Flowers

\(f_i\) 為最後一個保留的位置是 \(i\) 的最大價值和,然後直接用樹狀陣列優化一下 dp。

AC

W Walk

矩陣快速冪板子,直接把矩陣 \(k\) 次方然後每一個位置加起來即可。

AC

T Permutation

以前學長講過,現在差點又不會了。

Bonus1:P4099 [HEOI2013]SAO

Bonus2:loj#575. 「LibreOJ NOI Round #2」不等關係

可以發現樹形圖拓撲序計數問題嚴格強於其,於是把 Bonus1 程式碼蒯過來就好了。(霧)

還是講一下做法:

\(f_{i,j}\) 為 dp 完字首 \(i\),其中第 \(i\) 個位置在拓撲序位於 \(j\) 的方案數,那麼可以得到轉移方程:

\[f_{i,j}=\begin{cases}\sum_{k=1}^{j-1} f_{i-1,k} &<\\\sum_{k=j}^{i-1} f_{i-1,k}&>\end{cases} \]

字首和優化即可做到 \(O(n^2)\)AC

不太會 Bonus2,看了下 loj 題解。

上面的 dp 狀態都是兩維的,不優秀。我們考慮忽略大於號,那麼相當於填入若干遞增序列,答案明顯是一個多重組合數:

\[\frac{n!}{\prod x_i!} \]

然後考慮用容斥來將大於號納入考慮,有一個大於號沒有滿足則乘 \(-1\)

的容斥係數:

列舉最後一段遞增序列,那麼有:(令 \(cnt_i\)\(i\) 這個字首的大於號數量)

\[f_i=\sum_{j=0}^{i-1}f_j\times(-1)^{cnt_i-cnt_j}\times\frac{1}{(i-j)!} \]

這個東西是分治 FFT 的形式,令 \(F(x)=f_x\times(-1)^{cnt_x},G(x)=\frac{1}{x!}\)

\[F(x)=(-1)^{cnt_i+cnt_{i-1}}\sum_{j=0}^{i-1}F(j)G(i-j) \]

時間複雜度 \(O(n\log^2n)\)

程式碼鴿了。

U Grouping

簡單狀壓 dp,複雜度 \(O(2^nn^2+3^n)\)

AC

V Subtree

首先有一個 \(O(n^2)\) 的 dp,直接把每個點作為根節點,然後設 \(f_{i}\) 表示 dp 完 \(i\) 的子樹,且 \(i\) 為黑色的方案數。

優化到 \(O(n)\) 直接換根 dp 即可。

由於模數不是質數,需要維護一個點所有兒子的字首積和字尾積,典中典了這屬於是。

AC

W Intervals

首先將區間按照右端點排序,那麼可以設計一個 \(O(n^2)\) 的 dp:

\(f_{i,j}\) 為考慮了前 \(i\) 個位置,最近一個 \(0\) 在位置 \(j\) 的最大答案,有:

\[f_{i,j}=\begin{cases}f_{i-1,j}+\sum_{l_k\leqslant j\leqslant r_k=i}&j<i\\\max_{k<i} f_{i-1,k}&j=i\end{cases} \]

第一維滾一下,第二維放線上段樹上即可做到 \(O(n\log n)\)

AC

X Tower

不會啊,自閉了。

首先總重量一定要小於等於承重能力的最大值,也就是總重量是 \(10^4\) 範圍,提示我們考慮 \(O(ns)\) 做法。

有一個簡單的 \(O(n^2s)\) 就是跑 \(n\) 遍從前往後的揹包,但是顯然過不了。

考慮安排一個合適的順序,然後跑一遍揹包。

我們考慮若 \(s_a-w_b>s_b-w_a\),那麼 \(a\) 放在下面一定優於 \(b\),於是我們按照 \(s+w\) 排序即可。

AC

Y Grid 2

典中典,感覺在 CF 也見過。

容斥,我們令 \(f_i\) 為最後停留在第 \(i\) 個點的所有路徑容斥係數之和。

然後直接列舉上一個位置,中間的路徑組合數爆算即可。

AC

Z Frog 3

斜率優化板子,在考場上我肯定會選擇用李超樹碾過去,不過鑑於是練習。就推一推斜率優化吧。

設跳到的最後一個位置為 \(i\),有兩個位置 \(j,k\) 可以轉移s過來,且 \(j\)\(k\) 優,那麼有:

\[f_j+(h_i-h_j)^2+C\leqslant f_k+(h_i-h_k)^2+C \]

化一化式子有:

\[\frac{f_j+h_j^2-f_k-h_k^2}{h_j-h_k}\geqslant 2h_i \]

直接單調佇列維護一下凸殼即可。

AC