专栏文章

题解:CF2159D1 Inverse Minimum Partition (Easy Version)

CF2159D1题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minlu8o1
此快照首次捕获于
2025/12/02 04:31
3 个月前
此快照最后确认于
2025/12/02 04:31
3 个月前
查看原文
首先,本题很容易得出一个暴力 dp O(n2)O(n^{2}) 的做法:dpi=minj=0i1dpj+cost([aj+1,aj+2,,ai])dp_{i} = \min\limits_{j=0}^{i-1}{dp_{j} + \operatorname{cost}([a_{j+1},a_{j+2},\dots,a_{i}])}。但显然这不够优秀。
接下来介绍两个神奇的结论。只需了解任意一条就可以解决 D1,但是只有将这两条都掌握才能解决 D2。
(备注:下文称 aa 的最大取值为 VV
D1 解法 1(性质 1)
f(a)2log2anf(a) \leq 2 \log_{2} a_{n}
考虑一种每个子段的 cost\operatorname{cost} 都为 1122 的贪心做法。因为你在划分时根据贪心策略显然会将第一个 <an2< \frac{a_{n}}{2} 的数划为下一段的右端点,所以不难发现 cost=2\operatorname{cost} = 2 的子段数量显然不超过 log2an\log_{2} a_{n} 个。
这样答案范围直接缩小到了 128128 以内。我们可以设置一个 rir_{i} 维护 f([a1,a2,,ak])if([a_{1},a_{2},\dots,a_{k}]) \leq i 的最大 kk 值,省去原暴力做法中许多不必要的转移,实现 O(nlog2V)O(n \log_{2} V) 的 dp。
D1 解法 2(性质 2)
存在一种最优解,使得划分出的每一个子段的 cost\operatorname{cost}3\leq 3。这是因为,对于任意一个 cost\operatorname{cost}=x(x4)= x (x \geq 4) 的子段都可以拆成一个 cost\operatorname{cost}x2\leq \frac{x}{2} 的子段和一个 cost\operatorname{cost}2\leq 2 的子段。由于 x2+2x\frac{x}{2} + 2 \leq x,这样做显然是不劣的。
这样,就可以考虑使用数据结构解决 D1 了,但相对于解法 1 而言比较繁琐,不再介绍。
D2 解法
模仿 D1 解法 1,我们将 dpi,jdp_{i,j} 的定义修改为使得 f([ak,ak+1,,aj])if([a_{k},a_{k+1},\dots,a_{j}]) \leq i 的最小 kk。显然,dp0,j=j+1dp_{0,j} = j+1
i=1,2,3i = 1,2,3 时,dpi,jdp_{i,j} 可以通过使用线段树计算出来。
根据上述两条性质可知对于 i4,dpi,j=mink=13(minl=max(dpi,jk1,0)j1dpl,k)\forall i \geq 4, dp_{i,j} = \min\limits_{k=1}^{3}(\min\limits_{l=\max(dp_{i,j-k}-1,0)}^{j-1}dp_{l,k})。对 i=1,2,3i = 1,2,3 时的 dpi,jdp_{i,j} 分别开一个 ST 表实现 O(1)O(1) 查询区间查询最小值即可。
答案即为 i=1128j=1ni(dpi,jdpi1,j)\sum\limits_{i=1}^{128} \sum\limits_{j=1}^{n} i(dp_{i,j} - dp_{i-1,j})。时间复杂度 O(n(log2n+log2V))O(n (\log_{2} n + \log_{2} V))

评论

0 条评论,欢迎与作者交流。

正在加载评论...