A
从两边贪心即可。
B
设 \(f_{i,j,0/1}\) 表示牌堆还剩 \(i\) 张牌,现在已经有 \(j\) 种有用的牌种,是否有对子的期望。转移考虑分讨新的牌是否有贡献,有什么贡献即可。
C
首先差分,现在一次操作就是一个位置加一个位置减相同的数。然后很明显答案有一个上界就是 \(n-1\),现在考虑如果能够凑出一个和为零的集合就能让答案减一。但是并不是所有的集合都是合法的,因为你只能加,所以你需要满足对于任意前缀和非负,于是就可以设计一个 dp,设 \(f_S\) 表示 \(S\) 中最大划分出来的合法集合数。然后枚举子集就是 \(\mathcal O(3^n)\),然后因为有很多状态没有用所以剪掉即可。输出方案就是在转移的时候记录从哪里来的即可。
D
首先有一个暴力 dp,设 \(f_i\) 表示最后一个选了 \(i\) 的最大价值,于是有转移 \(f_i=\max \{f_j\}+d_i\),然后对于 \(j\) 有三个限制分别是:\(t_i-R\le t_j\le t_i-L,c_j\le b_i,a_i-h\le a_j\le a_i+h\)。现在考虑优化转移。
注意到这个东西是三维的限制所以我们能够自然想到 cdq,但是普通的 cdq 每一维的限制只有一边,于是这道题我们需要用条状 cdq,考虑 cdq 的本质,我们对 \(t_i,t_j\) 建立一个坐标系,于是能够发现合法的转移范围是一个平行四边形。考虑用若干三角形切割四边形,于是每个点只会在一个三角形中计算贡献,我们同样可以 cdq,记录三角形的三个顶点然后正常转移即可,注意内层用线段树维护最大值。