近期刷題總結[ 19 04 07 ]

目錄

P2523 [HAOI2011]Problem c [ DP + 組合數學 ]

[CQOI2014]數三角形 [ 組合數學 ]

P2606 [ZJOI2010]排列計數 [ DP + 組合數學 ]

P2962 [USACO09NOV]燈Lights [ 高斯消元 + dfs ]

JSOI2012 始祖鳥 [高斯消元]

P2474 [SCOI2008]天平 [差分約束]

P3281 [SCOI2013]數數  [稍難的數位DP]

P4130 [NOI2007]項鍊工廠 [Splay]

P3288 [SCOI2014]方伯伯運椰子 [ 分數規劃+spfa ]

P3280 [SCOI2013]摩托車交易 [貪心 + Kruskal重構樹]


P2523 [HAOI2011]Problem c [ DP + 組合數學 ]

我們令 s[i] 爲 i 後方已經確定的個數, 顯然如果 s[i] > n - i + 1 就是不合法的

考慮用DP統計答案, f[i][j] 表示i後方確定了j個的方案數, 我們枚舉k個, 將後面j箇中的k個放到i, 於是有方程

f[i][j]=\sum_{k=0}^jf[i+1][j-k]*C(j,k)


[CQOI2014]數三角形 [ 組合數學 ]

很明顯用全部個數 - 不合法

對於不合法的情況, 我們枚舉一條線段 (0, 0) -- (x, y), 顯然中間的個數爲gcd(x,y) - 1

然後將這條線段移動, 移動範圍就是(n-x+1) * (m-y+1) , 根據對稱性 * 2 減掉就可以了


P2606 [ZJOI2010]排列計數 [ DP + 組合數學 ]

題意 : 求n個點構成的大根堆個數

f[i] 表示 編號爲i的點的個數, siz[i] 表示大小, 考慮轉移

對於左兒子的任意一種構造, 右兒子的任意一種構造, 都可以從siz[i] - 1 個數中 選siz[l]個填到左兒子

f(i)=f(l)*f(r)*C(siz[i]-1,siz[l])


P2962 [USACO09NOV]燈Lights [ 高斯消元 + dfs ]

構造異或方程, 先消元, 對於不定的元dfs就可以了


JSOI2012 始祖鳥 [高斯消元]

選0 表示上游, 選1 表示下游

對於出度爲偶數的點, 不管它是什麼, 只有選偶數個點(無論0/1)就可以了

對於出度爲奇數的點, 如果它選0, 就要求有偶數個0, 奇數個1, 它選1, 就要求有奇數個0, 偶數個1

構造出異或方程組過後高斯消元 (可以用bitset)


P2474 [SCOI2008]天平 [差分約束]

我們令Min[x][y] 表示x比y最少重多少, Max表示最多重多少


P3281 [SCOI2013]數數  [稍難的數位DP]

 


P4130 [NOI2007]項鍊工廠 [Splay]

Splay 的模板, 只不過細節比較多


P3288 [SCOI2014]方伯伯運椰子 [ 分數規劃+spfa ]

分數規劃後就是Spfa判負環, 網絡流的思想十分的獨特啊


P3280 [SCOI2013]摩托車交易 [貪心 + Kruskal重構樹]

先將有鐵路的點縮成一個, 建出重構樹後按題目給出的點的順序模擬就可以了 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章