比赛链接
T1
一看就是整除分块的形式,如何整除分块
发现对于 j ≤ i j\le\sqrt i j≤i, ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ⌊ji⌋ 对应这唯一的值,暴力乘
对于 j ≥ s q r t i j\ge sqrt i j≥sqrti, ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ⌊ji⌋ 的值可能有一段区间 [ l , r ] [l,r] [l,r] 都是这个值
而 b 的下标可以去到的值就是 i − ⌊ i j ⌋ ∗ j ( j ∈ [ l , r ] ) i-\left \lfloor \frac{i}{j }\right \rfloor*j(j\in[l,r]) i−⌊ji⌋∗j(j∈[l,r])
就是区间 [ i − r ⌊ i j ⌋ , i − l ⌊ i j ⌋ ] [i-r\left \lfloor \frac{i}{j }\right \rfloor,i-l\left \lfloor \frac{i}{j }\right \rfloor] [i−r⌊ji⌋,i−l⌊ji⌋]之间每割 ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ⌊ji⌋个位置的 b 的和,发现 ⌊ i j ⌋ ≤ n \left \lfloor \frac{i}{j }\right \rfloor\le \sqrt n ⌊ji⌋≤n
直接开 n \sqrt n n 个数组预处理前缀和即可
T2
D A G DAG DAG 上玩一玩支配树就好
口胡支配树:建出一棵树,祖先支配子孙,假设当前处理到的 x x x,入度为 0,也就是之前能到它的已经处理好(在支配树中),然后对于一个点,能支配它的就是它到根的链,于是能支配当前点 x x x的,就是可以到它的点在支配树上的 l c a lca lca
T3
首先有 n p 2 np^2 np2 的 d p dp dp, f i , j , k f_{i,j,k} fi,j,k 表示到 i, ∑ a i x i = j \sum a_ix_i=j ∑aixi=j, ∑ b i x i = k \sum b_ix_i = k ∑bixi=k 的 ∑ c i x i \sum c_ix_i ∑cixi 的最大值
转移枚举当前选不选就可以了
仔细观察数据范围,觉得应该是 O ( n p ) O(np) O(np) 的,然后发现 ∑ a i x i ≤ p \sum a_ix_i\le p ∑aixi≤p, ∑ b i x i ≥ p \sum b_ix_i \ge p ∑bixi≥p
限制条件是相同的,于是令 f i , j f_{i,j} fi,j 表示 ∑ a i x i ≤ j \sum a_ix_i\le j ∑aixi≤j, ∑ b i x i ≥ j \sum b_ix_i \ge j ∑bixi≥j 的 ∑ c i x i \sum c_ix_i ∑cixi 的最大值
如果当前不选, f i , j = f i − 1 , j f_{i,j}=f_{i-1,j} fi,j=fi−1,j
如果当前选 f i , j = m a x ( f i − 1 , k ) + c i ( k ∈ [ i − b i , i − a i ] ) f_{i,j}=max(f_{i-1,k})+c_i(k\in [i-b_i,i-a_i]) fi,j=max(fi−1,k)+ci(k∈[i−bi,i−ai])
单调队列优化即可,数组可以滚动
总结:
不错的一套题
学到了分块的重要思想,直接求的有哪些,需要预处理的有哪些
然后手玩了一下支配树
学到了通过数据范围猜状态,通过限制条件的相似性减少状态