随笔分类 - XCPC——计数(组合,多项式)
摘要:题意 给定一个位置x,求在分别取1-n的所有情况下,对应笛卡尔树不同的排列个数。 题解 先不考虑,列出转移式,发现是卡特兰数。 进一步地,可以把排列对应笛卡尔树意义下的不同构数,和二叉树不同构数等价联系起来:因为对于任何一个二叉树,按照中序遍历在上面填1-n,就可以唯一确定一个排
阅读全文
摘要:写一下如何抄对板子(原理还是有看的,大概是到了看得脑壳有点疼+似乎领略到了一些东西的程度,然后就可以心安理得地抄代码了) step1:算g(n,j) 公式 预处理 这里的值是,其中表示把带入为质数时的表达式,这里$
阅读全文
摘要:将n拆分成任意个无标号正整数(也可认为是排好序)的方案数记为 暴力DP—— 两种考虑方式,第一维都是总和,对于第二维,一种是考虑前j种数,另一种是分成j个数。即第一种是完全背包,第二种是考虑最小的数是否为1转移。 数据分治优化—— 注意到两种DP
阅读全文
摘要:原本觉得搞OI的时候组合计数还不算太弱,但现在已经完全不会了,,稍微补救一下 卡特兰数 组合意义 n个节点二叉树的形态个数(还有很多其他的形式) (今天数据结构课上老师问了这个问题,然后我解了个生成函数发现不会化开根号,也忘记这是卡特兰数了) 计算 通过递推式可以列出生成函数,然后解一个二次方程,用
阅读全文
摘要:题目链接 设f[i]表示还有i个数不在集合内的期望步数,尝试列一下转移式,会发现式子由转移到下一轮的期望步数和之后的DP值组成,考虑DP的转移过程,就会发现答案为转移到下一轮的期望步数期望的轮数(即把前者设为1之后的DP值)。 前者是易求的,考虑后者,如果直接考虑一轮第一次遇到0时
阅读全文
摘要:取模下的运算(模数确定) 点击查看代码 void inc(int& x,int y){ x+=y; if(x>=P) x-=P; if(x<0) x+=P; } int sum(int x,int y){ x+=y; if(x>=P) x-=P; if(x<0) x+=P; return x; }
阅读全文
摘要:题目链接 破防了,上周很套路的ds题调半天还以为只是码力下降了,现在发现原本比较自信的计数能力也不行,不明白为什么连简单的容斥都想不清楚... 把题意抽象一下,就是有一个长度为n的排列对应的有向图,需要依次经过每一个点,并且不经过给定的边。 那么显然考虑容斥,枚举至少经过几条给定的边。然而如果对于序
阅读全文