NOI.AC CSP-S 模拟 Round 3 简要题解

比赛链接
T1
一看就是整除分块的形式,如何整除分块
发现对于 j ≤ i j\le\sqrt i ji ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ji 对应这唯一的值,暴力乘
对于 j ≥ s q r t i j\ge sqrt i jsqrti ⌊ 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]) ijij(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] [irji,ilji]之间每割 ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ji个位置的 b 的和,发现 ⌊ i j ⌋ ≤ n \left \lfloor \frac{i}{j }\right \rfloor\le \sqrt n jin
直接开 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 aixip ∑ b i x i ≥ p \sum b_ix_i \ge p bixip
限制条件是相同的,于是令 f i , j f_{i,j} fi,j 表示 ∑ a i x i ≤ j \sum a_ix_i\le j aixij ∑ b i x i ≥ j \sum b_ix_i \ge j bixij ∑ 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=fi1,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(fi1,k)+ci(k[ibi,iai])
单调队列优化即可,数组可以滚动


总结:
不错的一套题
学到了分块的重要思想,直接求的有哪些,需要预处理的有哪些
然后手玩了一下支配树
学到了通过数据范围猜状态,通过限制条件的相似性减少状态

你可能感兴趣的:(单调队列优化DP,分块,FSY的好题汇总)