计数问题选讲做题记录

计数杂题。


calc

考虑先不管数字之间的顺序,最后给答案乘上一个 n!

dpi,j 表示前 i 个数在 [1,j] 之间选,所产生的总贡献,显然有 dpi,j=dpi,j1+j×dpi1,j1,最后的答案是 dpn,k

发现 dpn 是一个 2n 次多项式,拉插一下随便做。

最长上升子序列

好题。

fi 表示前 i 个数组成的序列的 LIS 长度。

考虑将 1n 依次插入序列,即时维护整个 f 数组,可以发现 fifi11,因此我们可直接维护 f 数组的差分。

考虑插入一个数会对 f 数组产生什么影响,首先是在这个位置的差分数组插入一个 1,再把后面的第一个 1 变成 0(具体可以自己画一画)。

也就是说,我们可以在 i=1ni2i=O(n2n) 的时间复杂度内求解,但是你发现这玩意要跑 10+s 啊。

发现这个题一共就这么几种输入,直接打表就可以了。

注意开数组的时候因为 f1 一定等于 1,所以可以只开到 227,然后再滚动一下空间就没有什么压力了。

Decreasing Subsequence

发现这个 aii 很不好做,考虑将所有的 ai 减 1,然后让 iai 连边,可以发现最终的图是若干条互不相交的链,且每条链都是从最后的节点不断向前连边。

然后考虑一下长度为 k 的下降子序列在图上是个什么样子:

这是 k=4 的情况,发现就是要求有 k 条依次包含的边。

考虑 k 条边所在的 k 条链,假设一共有 i+j 个点,在中线的左侧 i 个,右侧 j 个。如果左右两边的情况都确定了,那剩下的中间 k 条边的连法是唯一确定的,即一共 {ik}{jk} 种方案。其余的 n+1ij 个点可以随便连边,也就是一共 t{n+1ijt}=belln+1ij 种,因此答案就是 ij(n+1i+j){ik}{jk}belln+1ij

随机立方体

简单题,随便做。

考虑二项式反演,钦定了 k 个位置是极大的数

posted @   Grisses  阅读(32)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
Document
点击右上角即可分享
微信分享提示