原创 【考試題 - sequence】DP

沒有測試數據,但是和正解對拍了 400 多組數據都過了.    手畫一下發現每個數如果變化的話只有 3 種情況:$-1,0,1$.    感性理解的話一個數變小的話對前面更優,對後面更劣.        但是我們發現不可能存在一個數使得該數

原创 BZOJ4832 [Lydsy2017年4月月賽]抵制克蘇恩 記憶化搜索

概率DP+記憶化搜索.   直接記憶化搜索感覺比較顯然+簡單.   直接設狀態 $f[x][a][b][c]$ 表示還剩 $x$ 輪,當前牌的狀態爲 $(a,b,c)$ 還期望造成的傷害.   轉移的話就是倒着轉移:$f[x][a][b][

原创 LOJ#3157. 「NOI2019」機器人 DP+拉格朗日插值

NOI2019 兩道插值可還行.    一個數不可能向右移動到超過後綴最大值的位置,也不可能向前移到前綴最大值之前的位置.   那麼就考慮基於最大值的分治(DP)     令 $f[l][r][x]$ 表示當前區間爲 $[l,r]$ 最大值

原创 LOJ#2567. 「APIO2016」划艇 離散化+DP

運用到了 NOI2019 機器人那道題的技巧.     考慮對區間進行離散化,然後設當前枚舉到的兩個端點爲 $[l,r]$.   先處理 $[l,r)$,會遇到 $\sum_{i=1}^{n} \binom{len}{i} \binom{k

原创 LOJ#2569. 「APIO2016」最大差分 分塊+交互

比較有趣的交互題.     subtask1:     由於每次調用這個函數可以返回值域中的最大值和最小值,所以可以每次查詢出兩個元素.    那麼每次查到 $x,y$ 後就將查詢區間縮小爲 $[x+1,y-1]$,這樣可以在規定操作次數內

原创 LOJ#3160. 「NOI2019」鬥主地 打表+拉格朗日插值

裸做的話設一個 $p[i][j]$ 表示兩個堆分別抽走 $i,j$ 個的概率.    轉移的話就枚舉當前是第幾個,然後再枚舉左/右面由下向上第幾個貢獻.       不在模意義下做,開 double 打表發現無論怎樣洗牌,一次函數還是一次函

原创 LOJ#3271. 「JOISC 2020 Day1」建築裝飾 4 DP+找規律

有一個非常顯然的 DP:    $f_{i,j,0/1}$ 表示當前 $DP$ 到 $i$,選了 $j$ 個 A,當前位置選的是 A/B 是否可行.   狀態數爲 $O(n^2)$,轉移爲 $O(1)$,時間複雜度爲 $O(n^2)$. 

原创 CF1386C Joker 雙指針+動態樹

雙指針+LCT.      在二分圖那道題中,有一種用 LCT 維護奇環的方法.    該題的做法和那道題相似.       對於 $i$,維護 $left[i]$ 表示當刪除 $i$ 時最靠左的端點使得刪掉 $[left[i]+1,i]$

原创 【考試題 - txdy】 枚舉+DP

題意:給定一個字符串,求有多少個子序列滿足該子序列長度爲 $7$,且位置所對應字母在子序列中排名爲 3652415.    觀察發現如果枚舉 $3,5,2$ 上的字母的話其他字母插入方式只有 1 種,即不會引起衝突.    然後就令 $f[

原创 LuoguP6694 強迫症 找規律+NTT

比賽的時候切的,可惜沒搶到首 A. 權值和等於 $\sum_{i=1}^{n} \sum_{j=i+1}^{n} a_{i} \times a_{j} \times f(j-i+1) \times f(n-j+i+2)$,最後再除以 4. 

原创 【考試題 - 排列】 分治+樹形DP

題意:求有多少種排列滿足 $i$ 之前第一個小於 $i$ 的位置是 $q[i]$.   如果沒有 $q[i]$ 的限制,答案就是全排列,然後 $q[i]$ 會限制一些元素之間的大小關係.   直接做的話沒辦法方便地求出元素之間的大小關係. 

原创 LuoguP2605 [ZJOI2010]基站選址 線段樹優化DP

比較好的一道題 DP 題.     令 $f[i][j]$ 表示覆蓋前 $i$ 個基站且 $i$ 位置上維修了基站的最小代價.    注意:上面設的狀態是不考慮 $[i+1,n]$ 的.      轉移的話 $f[i][j] \leftar

原创 LOJ#3058. 「HNOI2019」白兔之舞 單位根反演+矩陣乘法+MTT

毒瘤多項式.    找原根+矩陣乘法+拆係數FFT大雜燴.       code:  #include <vector> #include <cmath> #include <cstdio> #include <cstring> #in

原创 LOJ#3087. 「GXOI / GZOI2019」旅行者 二進制分組+Dijkstra

通過這道題了解二進制分組.       由於我們只需要求兩兩之間最短路的值而不需要求具體是哪兩個點得到的最短路,可以使用二進制分組.    因爲如果兩個點對答案有貢獻,那麼這兩個點一定在某個二進制位上不同,而 dijkstra 可以方便地求

原创 LOJ#2302. 「NOI2017」整數 線段樹+壓位

裸做的話是 $O(n \log^2 n)$ 的,即將 $a$ 進行二進制拆分,然後暴力更新.     考慮進行壓位,即線段樹的每一個葉節點維護長度爲 $30$ 的狀態.     加法操作如果需要進位的話就找到其後面的塊中第一個 0 所在位置