Review 2020.10.29
Date range: 10.12 - 10.29
求 [a,b] 之間相鄰數位只差不超過 2 的數字個數。
數位 dp,狀態表示為:走了幾位,最後一位是幾,當前數字是否貼著上界。
求 [a,b] 二進位制表示中 0 的個數大於 1 的個數的數有多少個。
數位 dp,狀態表示為:走了幾位,當前 0 的個數,當前 1 的個數。
求滿足本身乘以它所有數位的乘積在 [a,b] 之間的所有數字的個數。
所有數位的乘積數目很少,暴力列舉之,然後會做一個關於質因子數目限定的數位 dp。
構造一個具有 n 的三元環的無向圖,n 不超過 2e6,點數不超過 500.
暴力,不斷構造若干個相互獨立的完全圖。
給定 n 根柱子,按任意順序放置為一個二維圖形,求所有可能的盛水量。
顯然我們只會從高到低放置柱子或者放棄一些柱子,維護水量和柱子高度的總和,f[i][j]
表示填了 i
個空位,能否拼成 j
的水量和柱子高度的總和,暴力轉移即可,用 bitset
優化。
求帶點權無向圖的邊權和最小的哈密頓迴路,邊權是點權的差的平方。
只需要最優化交叉乘積項,找規律貪心。
點權樹,求極差不超過 d 的連通子圖的個數。
\(O(n^2)\) 的樹形 dp,難點在於處理點權相等的情況,此時比較編號即可。
給定一個序列,如果 i,j 中間沒有任何一個數比端點大,或者沒有任何一個數比端點小,則可以從 i 跳到 j。求從 1 跳到 n 的最小步數。
考慮 dp,所有轉移來源對應單調棧彈棧過程中經歷的所有棧頂。
在樹上刪除最多的邊,使得所有點離最近的黑點的距離不超過 d。
從所有黑點開始 BFS,若 q 被訪問過而 (p,q) 沒被訪問過,則 (p,q) 可以被刪。
給定一個序列無限次操作,每次選擇一個區間讓該區間內的所有數變成區間的平均數,求操作後字典序最小的序列。
單調棧,每次棧頂比待入棧元素高就暴力彈棧,將被彈出的元素和待入棧的元素合併。
給定一張 \(n,m \le 10^3\) 的圖,有 \(k\) 個點對 \((a_i,b_i)\) 表示運輸專案,選擇一條邊的權值變為 \(0\) 來最小化所有運輸專案的最短距離的和。
考慮 \((u,v)\) 變為 \(0\) 對 \((a,b)\) 的影響,分經過和不經過 (u,v) 討論
在 \(n\times m\) 迷宮中一秒鐘可以向四個方向中的一個移動 \(1 \to k\) 步,求起點到終點的最短時間。\(n,m,k \le 1000\)
正常 BFS,剪枝條件小心。
給定一個 \(n \times m\) 矩陣,要求每行只能選取不超過一般的元素,使得選出元素的總和是 \(k\) 的倍數,且這個總和最大。求這個最大值。
一堆 dp。
給定一本字典的若干頁,每頁上會有若干個單詞,這本字典的字母順序是標準順序的一個排列。求出任意一種排列或者判定非法。重編號後簡單拓撲排序。
給定一個長度為 n 的序列 a,有 q 次操作,每次交換 a[l],a[r],在操作前和每次操作後,求出 a 中所有子序列的交替和的最大值。
其實就是在差分序列中選出一些段。於是只需要選擇那些 >0 的部分即可。同時每次操作只會影響到不超過 4 個位置,暴力維護即可。
將 n 的所有大於 1 的因數任意排列在一個環上,每次選擇相鄰兩個數,在中間插入他們的最小公倍數,使得環上不存在兩個相鄰且互質的數。找到一個操作次數最少的排列。
從最小數開始每次選擇一個與上一個數不互質的最小數輸出。
數軸上有 n 個點,每次操作可以把所有位於 x 的左移或右移一格,求所有點移動到不超過兩個整點的最小操作次數。對點集做出修改,動態維護答案。
對於有序集,維護最大 gap。
給定有根樹,每個結點上有 N 個人,每個人可以選擇任意孩子方向走,直到走到葉子結點為止,問最後人最多的葉子結點最多有多少人。
p 的答案一定不會小於 q 的答案,也不小於整個子樹平均分配的答案。這也是一定能取到的。
給定一個數列,其中一些元素固定,另一些元素可以修改。要求修改最少的元素使得這個序列變成嚴格單增的序列。
固定元素將原序列分割成了若干段,每段內求一下 LCS,剩下的就是需要移動的。注意,如果超出了左右兩側的固定元素限制的值域,那麼這個元素也必須被移動。