摸底考试 #3

Dubnium / 2023-08-27 / 原文

T1 摆花

img

题解

诈骗题

取最小的 \(r_i-l_i+1\) 即可

时间复杂度 \(O(m)\)

T2 打饭

img

【数据范围】

\(n \leq 3 \times 10^5,k \leq \min(n-1,5 \times 10^3),-10^9 \leq a_i \leq 10^9\)

题解

线性DP好题

可以发现问题等价于将原序列分成 \(k\) 组,其中 \(n\%k\) 组中分别有 \(n/k+1\) 个数(第一类 ),别的 \(k-n%k\) 组分别有 \(n/k\) 个数(第二类),即 \(j,k+j,2k+j…\left \lfloor n/k\right \rfloor \times k+j\)(或者 \((n/k-1)*k+j\)

答案就是每个组中的最大值 \(-\) 最小值,而为了使差值最小,答案必须是连续的一段子序列,可以考虑DP

状态设计:设 \(dp_{i,j}\) 表示第一类的组已经分了 \(i\) 个,而第二类的组分了 \(j\)

状态转移:

\(n1=n\%k,n2=k-n\%k,l1=n/k+1,l2=n/k\)

则有两种转移:

  • \(dp_{i+1,j}=\min(dp_{i+1,j},dp_{i,j}+A_{(i+1)*l1+j*l2}-A_{i*l1+j*l2+1})[i<n1]\)

  • \(dp_{i,j+1}=\min(dp_{i,j+1},dp_{i,j}+A_{i*l1+(j+1)*l2}-A_{i*l1+j*l2+1})[j<n2]\)

答案即 \(dp_{n1,n2}\)

时间复杂度 \(O(\left \lfloor \frac{n}{k} \right \rfloor\times k)\)

T3 小象砍树

img

【数据范围】

\(n \leq 10^5\)

题解

树形DP好题