1 条题解
-
0
The Bakery 题解
思路
设 表示把前 个蛋糕划分成 个非空盒子的最大价值。转移为
$$dp_g(i)=\max_{g-1\le j<i}\{dp_{g-1}(j)+distinct(j+1,i)\}.$$固定层数 ,从左到右加入位置 。设 是 上一次出现的位置。对切分点 ,新区间 之前不含 ,加入它后不同值数增加一;对 则不变。因此,只需对候选切分点区间 整体加一,再查询 的最大值。
用支持区间加和区间最大值的懒标记线段树维护所有候选切分点,即可完成一层 DP。
做法
- 初始化上一层 ,其余状态不可达。
- 对每个盒子数 ,用上一层 DP 值建立线段树,并清空每个种类的上次出现位置。
- 依次扫描 ,将区间 加一,再查询合法切分点区间的最大值作为 。
- 最终输出 。
正确性证明
加入右端点 时,对于切分点 ,新区间为 。当且仅当 不小于 的上次出现位置时, 中没有 ,所以加入 会使不同种类数增加一。线段树的区间加恰好对全部且仅这些候选转移增加一。
线段树叶子 在扫描到 后因此等于 。查询所有合法 的最大值,正是 DP 转移式。逐层归纳可知所有状态正确,故 是恰好划分成 段的最大价值和。
复杂度
每层执行 次区间加和最大值查询,时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1011
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者