
组合数学
xyc1719
努力会说谎,但努力不会是白费
展开
-
A decorative fence 计数
【一句话题意】给n块长度为1~n的木板,组成一个长度为n的序列,满足相邻的木板都比自己长或短。方案按字典序排列。有多组询问,问当有ai块木板时,第bi号方案是什么。 ai<=20,bi<=263 【分析】类似于倍增dp的“拼凑”思想和手推康托展开时的方式,我们可以用“试填”的方式来确定第bi号方案中各个木板的长度。比如从小到大枚举,如果当第一块木板长为h时,N-1块木板的构成的方案数T...原创 2018-10-28 18:49:33 · 228 阅读 · 0 评论 -
Poj1737 Connected Graph 计数dp、组合数、高精度
又是一道令人胆寒的组合数。。。。 【一句话题意】求n个结点的无向图的个数。(每个节点有标号)n<=50 【分析】对于dp来说,状态的划分和转移是十分重要的。一个连通图是难以进行状态划分的,但一个不连通的无向图是则很容易划分成结点更少的两个部分。所以我们考虑从所有的无向图中减去所有的不连通图,就是所有连通图的数量。 一个无向联通图中至多有n∗(n−1)/2n*(n-1)/2n∗(n−1)/2条...原创 2018-10-27 22:21:27 · 253 阅读 · 0 评论 -
量子二叉堆 动态规划+乱搞求逆元
【一句话题意】最后希望你给出n个互不相同的数能构成多少个不同的大小为n的二叉堆(大根堆或小根堆都算二叉堆,不同定义为至少有一个位置上数不同)。 n&lt;=5e6 【分析】对于二叉堆,顶端最小(或最大)是确定的,剩余元素的分配其实是随意的。将剩余的元素随意分配到左右两棵子树,离散化之后就变成了之前的一个已求得的子问题。可以得到一个(伪)状态转移方程 f[x]=f[x左子树节点数]∗f[x右子树节点...原创 2018-11-04 14:30:54 · 202 阅读 · 0 评论 -
密码 passwd.cpp
【一句话题意】给你一个长度不超过17 的由0…9 组成的无前导0 的字符串S,求S 中的数字排列组成的无前导零的能被17 整除的整数中字典序第K 小的那个数。 k<=17! 【分析】 s有17位显然是数位dp,求排列第k大显然是计数dp。状态定义由于是求排列,所以不能像普通数位dp一样,定义为f[state][k]表示选择数之后状态为state对17取模为k时的方案总数。f[0,0]=1。 ...原创 2018-11-02 15:42:47 · 260 阅读 · 0 评论 -
集合划分 partition.cpp
【一句话题意】给定一个包含N 个非负整数的集合A,请将A 分成两个子集P、Q,且使得gcd(ΠPiΠQi)==1gcd(\Pi P_i \Pi Q_i)==1gcd(ΠPiΠQi)==1。请计算这样的划分方法总数mod1000000007 后的值。 n<=1e6 【分析】一道可做的数论题。按质因数划分,P和Q中不能有相同的质因数,拥有相同质因数的数必须放在同一个集合。将每个数分解质因数后...原创 2018-11-02 15:08:43 · 415 阅读 · 0 评论