2019 OI總結

10.6

日常被肖比丘吊打。

10.5

上午改題,下午考試。
題目是提高組找的一些dp題。

過河

\(sort\),只有20。
\(s=t\)的情況特判一下,否則把距離超過100的相鄰2個石頭距離變成100,再直接跑\(dp\)就行了。

加分二叉樹

我也記不得是第幾次做了

樹的劃分

\(dp\)一下沒想出來,就打了個\(195\times 5\)的表,過了。

這題其實是排列組合裏的題,可以把一個數值爲n的數當做n個小球,劃分的份數k當做k個盒子,那麼本題可以轉化爲“將n個小球放到k個盒子中,小球之間與盒子之間沒有區別,並且最後的結果不允許空盒”
將n個小球放到k個盒子中的情況總數 =
a.至少有一個盒子只有一個小球的情況數
b.沒有一個盒子只有一個小球的情況數
這樣進行劃分是因爲這種分類可以使a和b都有能寫出來的表達式:
a.因爲盒子不加區分,那麼1的情況數與“將n-1個小球放到k-1個盒子中”的情況數一樣
b.沒有一個盒子只有一個小球,那麼把每個盒子中拿出來一個小球,對應的是“把(n-k)個小球放到k個盒子中的情況數”
然後將上面的思路化爲動態轉移方程:
設f[n,k]代表將n個小球放到k個盒子中且沒有空盒的情況,那麼f[n,k] = f[n-1,k-1] + f[n-k,k]
而當k=1時只有1種方法(小球全部放進1個盒子)

統計單詞個數

我把狀態設成了區間,強行讓複雜度多了個\(n\)。其實只要設成前\(i\)個就行了。

郵票面值設計

純暴力\(dfs\)+\(dp\),數據水就過了。

篝火晚會

答案就是轉換成鏈以後最少的不匹配數。

10.4

上午考試,下午考試。

apple

貪心水題。

bags

我把所有方案全\(push\)\(vector\)裏面了,事實上只要前\(k\)個。

mos

只寫了個暴力

設T={a,b……c,d,e}(由小到大)
當前,將d與e移過去,有兩種選擇:
S1={e,a}{a}{d,a}{a}=e+a+d+a
S2={a,b}{b}{d,e}{a}=b+b+e+a
若S1<=S2,則移e(d的移動取決於c)否則將d,e一
起移過去,證明如下:
因爲S1>S2,故第一步移e,那麼第二步必然移動c,d:
S3={e,a}{a}{a,b}{b}{c,d}{a}=e+a+b+b+d+a,
S2’=S2+{a,c}{a}=b+b+e+a+c+a
S2’-S3=c-d<=0,故先移d,e更優。

tet

結論:設I在l與r出現,則I對應區間[l,r],則只有相互包含的區間會影響答案。
證明:假設相鄰的相同數字不消除,那麼每次交換隻能消除一個逆序對,故總交換次數=逆序對個數。相鄰數字消除只會影響包含該區間的區間。
所以,我們按區間大小進行處理,對於區間[l,r],需要交換次數爲(l,r)內未消掉的元素個數。
使用樹狀數組維護即可。

sta

裸樹的重心

abc

簡單區間\(dp\),只是高精掛了。

kup

只寫了個枚舉頂行底行然後尺取的\(O(n^3)\)暴力。
xjc:

把值>k*2 作爲斷點,然後跑最大子矩陣(懸線法)就行了。

atr

考試時沒有想到。
\(1,n\)還有那\(k\)個點分別跑一次\(Dijkstra\),然後建一個只含有這些點的完全圖,在這上面跑狀壓\(dp\)即可。

naw

題解這麼說:

F[i,j]表示對i至j添加括號的方案數,
G[i,j]表示將i至j全部取反後添加括號的方案數。
F[i,j]= ∑F[i,k-1]*G[k+1,j] {k∈[i,j],a[k]=’-‘}
G[i,j]= ∑G[i,k-1]*F[k+1,j] {k∈[i,j],a[k]=’-‘}
Ans=F[1,N-1]  時間複雜度n^3。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章