口胡记录,主要是调代码太费时,不如把每题思路好好梳理一下。
T1
苏卡布列
T2
把细胞合并转化为分裂,$ dp{l,r} 表示分裂过程中,留下(为什么说留下,因为把权值和较小部分直接丢掉)区间 [l,r] 的概率多大。转移即为在[l,r) 中选一个 k ,判断sum{l,k}和sum{k+1,r}哪个大,将其对应dp值加上\frac{dp{l,r}}{r-l}(为什么加上的是这个东西,因为k在[l,r) 中选的)。O(n^3)复杂度,用前缀和优化即可得O(n^2)$。
T3
用两种复杂度的算法进行平衡。
Case 1
令 dp_{i,j} 表示考虑前 i 列,且第 i 列有 j 个大积木的前半部分的情况,转移显然,复杂度 O(m^2n) 。
Case 2
考虑容斥,$gi表示考虑前i列,在没有限制的情况下,有几种密铺方案,显然为fib{i}^m(fib$ 为非伯纳切数列)。
令 f_i 表示考虑前 i 列,有几种合法方案,可得 ${\color{blue}f_i = gi – \sum\limits{j=1}^{i-1} fjg{i-j}}(这是非常重要的,很多题都可以用到)。复杂度O(n^2)$ 。
二者复杂度平衡可得 O((nm)^{\frac{4}{3}}) 。(为什么?数学问题,设 nm = p 分类讨论就完了)。
T4
观察性质可得:每个高度都至少有一个点不被抬升并且这个点是相同高度的点中 C 最小的,又因为每个点都至少有一个连接器,我们可以先把这些点组成的链拼出来,另 $Vi为高度为i的点中C的最小值,因此在高度[1,i]中添加一个新接口的代价为\min\limits{j=1}^{i} V_j,(显然),然后进行dp$ 即可。