2 条题解
-
4
题意
给出一个长度为 的序列 , 单调递增,问你有多少个序列 以满足下列条件:
- 是 的一个排列。
分析
我们发现 的值非常小,所以我们考虑使用类似背包的方法考虑每一个 和 对总答案的贡献。
由于 单调递增所以 中的数互不相同,因此我们可以直接考虑分类讨论值 在 中的位置,令 则:
- 若 ,,因此 对答案产生 的贡献。
- 若 ,,因此 对答案产生 的贡献。
- 若 ,,因此 对答案产生 的贡献。
计算答案的问题解决了,但是如何记录 在 中的位置?显然我们只关心 与 的大小关系,并不关心 的具体值。因此我们只需要知道有多少中情况满足 ,, 即可。
考虑使用 DP 解决此问题, 表示已考虑 部分, 中有 个位置尚未确定值,且 部分对总答案的贡献为 的方案数。转移时枚举 与 的大小关系和 是否确定值即可。 不确定值时即意味 将用 的数填充, 确定值时即意味 将用 的数填充。
具体转移见代码,建议手画几个图细心分析。
代码
信息
- ID
- 189
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 47
- 已通过
- 4
- 上传者