SS-组合记数
组合计数
Problem 0 - P4463
首先,“互不相同”这个条件十分难处理,所以考虑令
令
考虑
然而这样子转移复杂度过高,因此考虑优化。可以观察得出,
可得
Problem 1 - P4484
首先显然有一个计算最长上升子序列的 DP:
接下来可以由常见套路,从小到大插入数字。
考虑插入
但是,LIS 的 DP 值肯定满足差分数组在
重新回顾前面插入
剩下的打表即可。
Problem 2 - ARC138E
首先,让所有满足
为了防止记重,我们对于每个链只计算一次。则最后的答案肯定形如一个
接下来,我们枚举
最后对于所有
Problem 3 - P5400
看到”恰好“,首先往容斥想。
定义
接下来计算
最后把式子整合一下即可。
Problem 4 - AGC064D
考虑怎样的答案串可以被表示出来。设我们要检查的字符串为
- 如果
为B
,那么我们需要在 中找到任意一个满足末尾为B
的前缀,然后把这个前缀移到前面。 - 否则,我们在
需要找到任意一个以R
开头的字符串,并将最前面的R
删去;如果没有,则 不可以是最后的结果。
这个正确性是显然的,因为我们实际上就在倒序处理所有操作。
但是,这个检查的方法有许多”任意一个”,所以没办法详细的刻画一个串能否被表示。所以考虑改进上面的方法。
- 对于第二种操作,显然取任意一个位置都是一样的。
- 对于第一种操作,我们需要考虑后续的操作二。因为后面的操作相当于是说在删去一串
R
,所以我们需要让删去后前缀R
的总和最大即可。
接下来,就可以确定怎样的答案串可以被表示了。
- 将
翻转。 - 设
第 个B
前出现了 个B
。 - 设
中的B
把 划分成了长度分别为 的极长R
串。 - 将
降序排序。 (需要注意的是, 本身就是前缀和)。
接下来考虑 DP。我们将降序排序转化成单调不增,最后再乘上组合系数。令
枚举当前选了多少个,即可转移。特别需要注意的是边界问题。
Problem 5 - CF1942G
首先,转化题目。我们将题面表示成:
- 你有一个初始为
的变量 , 张类型 A 的牌, 张类型 B, 张类型 C, 张特殊牌。 - 类型 A 和特殊牌会使
,类型 B 没有影响,类型 C 会让 。 - 你持续操作,直到
或取完所有牌,问你停止操作后取完所有特殊牌的方案。
首先,由于类型 B 对答案没有影响,所以我们最后只需要乘上一个
特殊牌和类型 A 对
接下来,分最后是
对于
最后,由于后面可以任意排列,所以我们再乘上
Problem 6 - CF1874F
首先考虑容斥。我们钦定有
但是题目条件还是很难处理。所以考虑挖掘性质。我们发现,如果
所以说,如果两个区间有交,他们可以被拆分成若干个不交区间。因此,我们计数时只需要考虑不交或包含的区间即可。
因此区间的关系类似一棵树,可以考虑 DP。令
接下来的 DP 是简单的。
Problem 7 - P8478
不会,不想补。
Problem 8 - P4931
首先,考虑
总的方案是
接下来,剩下
设
首先,坐在最前面的两个人不能是情侣,所以有
然后,记
- 坐在一起:
,其中 表示 和 可以交换。 - 不坐在一起:
。
也就是说,
最后用
Problem 9 - QOJ5357
考虑如何合并答案。设我们现在合并
对于这个连通块的方案,我们每次都需要选在原本
然而,对于不在两个分治中心的路径上的点,我们选它的方案已经被记录到原本的 DP 中了, 所以不用考虑它们。
接下来就是在分治中心路径上的点。同样的,我们选在原本
所以说,我们合并只会乘上
最后 DP 即可,令
Problem 10 - P10104
不会,记得补。
Problem 11 - CF1081G
首先对于块内和块之间分别统计。
块内:
对于
对于一个长度为
块与块之间:
首先,手动模拟后,我们发现:对于两个不有序的
接下来,同样对于
最后,直接通过归并计算答案即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】