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