1. 程式人生 > 其它 >2021.10.3 QBXT

2021.10.3 QBXT

沒有摘要的摘要

10.3

目錄

補題

得分情況

100 + 20 + 50 + 10 = 180


T1 3627: 可持久化陣列

板子題??

標程: vector + 二分

直接寫主席樹可過


程式碼


T2 3628: 樹上的點集

陣列下標越界掛成 \(20\) /kk


對於點集中的點按照 \(dfs\) 序排序 設 \(dis_u\) 表示 \(u\) 到根的距離 \(s_i\) 表示點集中按照 \(dfs\) 序排序後第 \(i\) 個點 這些點到根覆蓋的路徑的邊權和為

\[\sum_{i = 1}^k dis_{s_i} - \sum_{i = 2}^k dis_{lca_{s_i, s_{i - 1}}} \]

提前對點集進行排序 預處理相鄰點的 \(lca\)

列舉選的點的狀態 可以做

複雜度 \(O(2^K \times K)\)

列舉狀態的時候用 \(dfs\) 列舉 複雜度可以降到 \(O(2^K)\) 可過


程式碼


T3 3629: 括號序列

資料沒有卡 把上界 \(O(n^2)\) 的寫法放過去了


程式碼


T4 3630: 拼圖遊戲

\(3 \times 3\) 八數碼問題

\(4 \times 4\)

一行一行的爆搜

\(n = 2\)

每次考慮將最左邊兩個數歸位

如果位置恰好相反 利用 \(2 \times 3\) 的矩陣進行換位 當只剩最後一個 \(2 \times 2\) 的矩陣的時候 旋轉 判斷是否有解

一般情況

....

原諒 BS 不想補這個題


動態規劃

ABC159F

考慮正常的 \(dp\)

大概 \(f_{i, j}\) 表示前 \(i\) 個數 選若干個 和為 \(j\)

對於確定的選數方案 考慮其被多少區間包含 對已有區間 \([l, r]\) 包含這個區間的區間為 \(l \times (n - r + 1)\)

\(n - r + 1\) 提出 考慮固定右端點 對 \(l\) 求和再乘上 \(n - r + 1\)

\(f_{i, j}\) 表示前 \(i\) 個數 選若干個數 和為 \(j\) 的左端點之和

這樣 \(dp\) 出來 對於一個 \(r\) 考慮該位置必須選 該點前的左端點之和就是 \(f_{r, s} - f_{r - 1, s}\)

這個東西是前 \(r\) 個數和為 \(s\) 減去 \(r - 1\) 個數和為 \(s\) 的方案 統計下來就是答案

轉移方程:

\[f_{i, a_i} += i \\ f_{i, j} += f_{i - 1, j} \\ f_{i, j} += f_{i - 1, j - a_i} \\ ans += (f_{i, s} - f_{i - 1, s}) \times (n - i + 1) \]

最後得到的 \(ans\) 就是答案


CF815C

首先有一個樸素的 \(dp\)

\(f_{i, j, 0/1}\) 表示第 \(i\) 個節點的子樹中買了 \(j\) 個物品 第 \(i\) 個物品是否使用優惠券 所用的錢數的最小值

轉移列舉子節點的子樹中購買物品的個數 揹包合併


CF1093F

z狀態 \(f_{i, j}\) 表示前 \(i\) 個數 最後一個為 \(j\) 合法的方案數

轉移的時候減去強制 \(len\) 個數字相同的方案數

\[f_{i, j} = \sum_{l = 1}^k f_{i - 1, k}, a_i = -1\\f_{i, a_i} = \sum_{l = 1}^k f_{i - 1, l}, a_i \ne -1 \]

容斥的話考慮能不能把 \(len\) 的區間全部變成 \(j\)

如果能將 \(i - len + 1\)\(i\) 之間全變為同一個數 將 \(f_{i, j}\) 減去 \(\sum_{x \ne j}f_{i - len, j}\) 即可


CF613E

道路分為三部分 兩端的 \(U\) 型 中間的折返向某一方向

\(f_{i, j}\) 表示 在第 \(i\)\(0\) 表示在上面那行 \(1\) 表示在下面那行 \(j\) 表示當前走過的路徑中匹配前 \(j\) 個字元

轉移考慮匹配幾個字元 強制狀態向右走 向右走或向右走完向下走

條件轉移 轉移的條件是第 \(j\)\(j + 1\) 個字元剛好匹配 \(s\)

\[f_{i, j, 0/1} \to f_{i + 1, j + 1, 0/1} \\f_{i, j, 0/1} \to f_{i + 1, j + 2, 1/0} \]

考慮兩端的 \(U\) 型 暴力列舉 判斷 \(s\) 是否可以匹配 雜湊

中間一段 \(dp\) 兩端 \(U\) 型雜湊


CF303E

考慮 \(n\) 個人的成績落在同一個區間的情況 第 \(i\) 個人考第 \(j\) 名的概率為 \(\frac 1n\)

\(f_{j, k, l}\) 表示去掉 \(i\) 個人以外 剩下的人有 \(k\) 個人落在 \(i\) 前面 \(l\) 個人與 \(i\) 落在同一個區間裡面...???


PKUSC2019D1T2

考慮確定一個同學的位置

選某個人 用 \(X\) 表示 其他人用 \(0/1\) 表示 其他所有桌只有 \(00, 11, 01\) 三種狀態

\(f_{i, S}\) 表示 其他桌的狀態為 \(S\)

...???


CF599E

\(f_{u, S}\) 表示以 \(u\) 為根的子樹中 點集為 \(S\) 的連邊方案數

轉移考慮從這個點集裡面拎出一棵子樹

\[f_{u, S} = f_{v, T} \times f_{v', S - T} \]

轉移的過程中需要判斷條件是否滿足


JOISC2020 D3T1

最小化刪去星星的權值和 即 最大化剩餘星星的權值和

\(h_i\) 建笛卡爾樹 對於一棵星星 將其轉化為笛卡爾樹上的一條鏈 鏈的一段為節點 \(x_i\) 另一端為 \(x_i\) 不斷向父親

...

???

\(f_{i, j}\) 表示以 \(i\) 為根節點的子樹中裡面選的鏈從 \(i\) 到深度為 \(j\) 的點的邊都被覆蓋過的選的情況的權值的最大值

轉移:

...

線段樹維護???

轉移向上合併???

... 線段樹合併維護 dp


NOI2020D1T2


CF gym 101190L


CF gym 101173I