专栏文章
题解:CF2066D2 Club of Young Aircraft Builders (hard version)
CF2066D2题解参与者 3已保存评论 3
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @minmqxkj
- 此快照首次捕获于
- 2025/12/02 04:57 3 个月前
- 此快照最后确认于
- 2025/12/02 04:57 3 个月前
一道比较神奇的计数题。
我们经过适当转化后的题意可以变为:
在一个序列 中填数,有些位置已经填好了,填完数后的 要满足以下条件:
-
对于任意 ,满足 的 数量要不少于 。
-
对于任意 ,满足 的 的数量要小于 。
不难发现,条件 可以写成满足 的 的数量恰好为 (同时结合了条件 )。
对于这一类问题,我们考虑直方图 DP 的类似处理方式,对于每一个 考虑 序列最终填完之后 的位置和 的位置来进行 DP。
Solution for easy version()
直接考虑上面的过程,定义 表示考虑到第 层, 的位置 有 个。考虑在 个位置中选出若干位置 满足 ,稍微分析一下性质就可以知道,在这 个位置中,只有前 个位置才可以放 的元素,因此有以下显然的 DP:
- 。
- 枚举 表示满足 的 的数量,有:。
- 答案是 。
时间复杂度为 ,代码 1。
Solution for hard version
考虑上面的 DP 思路能否继续使用,我们发现如果依旧使用上面的记录方式 ,在前 个位置中我们不知道存在多少个位置满足不能填 ,于是这个 DP 就假了。
我们能否记录一些本质相同但是和位置相关的信息呢?显然这是可以的,我们魔改一下 DP 数组,记录 表示考虑 的所有位置以后第 个 的位置是 ,这样我们得到的信息量就很大了!首先,所有 的位置 只能在 之前填;其次, 之前的空位数量恰好为 ;同时,在填完 后 的新位置就是 , 表示填 的数量。因此,我们可以进行 DP:
- 。
- 定义 为所有已经强制填的 的数量, 为所有 并且已经强制填的 的数量,要求不存在强制填的 ,有转移:。
- 答案为 。
这个东西有点抽象,我大概想了 40min 才会,可以画图理解一下,时间复杂度为 ,代码 2。
相关推荐
评论
共 3 条评论,欢迎与作者交流。
正在加载评论...