1 条题解
-
0
我们按位独立解决该问题,最后将每一位的结果相乘。
显然,如果某个位置被一个值为 的区间覆盖,则该位置必须为 ,没有选择余地。
对于值为 的区间,必须存在至少一个被它覆盖的位置,其值为 。因此我们可以设计如下动态规划:
设 表示满足以下条件的数组个数:最后一个 恰好出现在位置 ,且所有位于 左侧的 区间都至少包含一个 。我们需要确定可以从哪些状态 转移到 。
唯一的限制是:不能存在一个值为 的区间 ,使得 且 。
因为如果存在这样的区间,它就不会包含任何 值,违反条件。对于每个位置 ,我们可以预先计算出 ,表示所有右端点小于 的 区间的左端点的最右位置。
换句话说, 是满足:存在一个 区间 且 的所有 中的最大值。
那么转移时, 只能从 的状态累加。于是转移方程为:
边界条件可以设置一个虚拟位置 表示“尚未出现 ”,相应的 ,并据此计算前缀和。
利用前缀和,可以在 时间内完成 DP 计算,最后答案为所有 的和,对应最后一个 出现在任意位置的情况。
将每一位的答案相乘,即得到原问题的最终答案。
- 1
信息
- ID
- 6423
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8.5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者