组合数学
romiqi_new
这个作者很懒,什么都没留下…
展开
-
【组合数学】 牡牛和牝牛
题目: 约翰要带 N只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛。牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有K 只牝牛。请计算一共有多少种排队的方法,所有牡牛可以看成是相同的,所有牝牛也一样,答案对 5000011取模。BZOJ3398题解:(为了打字方便,下面的牡牛用公牛代替,牝牛用母牛代替)最多能放n/(k+1) 头公牛...原创 2018-10-10 14:45:41 · 2666 阅读 · 3 评论 -
[BZOJ5305][组合数学]HAOI2018:苹果树
BZOJ5305考虑统计点i对其父亲的贡献枚举i的子树中有j个点,则有j∗(n−j)j*(n-j)j∗(n−j)个点需要通过fa[i]fa[i]fa[i]i的子树一共有j!∗Cn−ij−1j!*C_{n-i}^{j-1}j!∗Cn−ij−1种形态剩下n−j−i+1n-j-i+1n−j−i+1个点统计进来ans=∑i=1n∑j=1n−i+1j!∗Cn−ij−1∗(n−j)!∗i∗(i−1...原创 2019-02-28 11:43:42 · 163 阅读 · 0 评论 -
[校内模拟][树形DP][组合数学][NTT]战略游戏
Link就是要求定下两个点,并从这两个点往外延伸k个互不相交的分支的方案数首先求出从某个点出发向子树内部延伸i个分支的方案数对于一个点的一个儿子,这个儿子的子树中每一个点都可能成为一条分支的终点,这个儿子内就有siz个终点不同儿子的子树互不影响,所以根据乘法原理,可以构造点v的生成函数:F(x)=∏(1+sizson[v])F(x)=\prod{(1+siz_{son[v]})}F(x)=...原创 2019-07-27 10:03:23 · 148 阅读 · 0 评论 -
[BZOJ5416][树状数组][组合数学]NOI2018:冒泡排序
BZOJ5416分析:我们先考虑为什么有些排列是好的,有些排列不好可以发现交换次数的下界这个式子即表示每个位置的数到它原本该在的位置,且有个1/21/21/2表示每次交换必须要让被交换的两个数都离自己的目标位置更近一步所以我们如果把每个数到他的目的地看做一个箭头,则任意两个同向箭头不能有完全包含的关系因为如果出现了包含的箭头,那大箭头一定会把小箭头往反向移动一步所以我们在一个位置填的数...原创 2019-08-09 23:18:12 · 125 阅读 · 0 评论 -
[BZOJ4013][树形DP][组合数学]HNOI2015:试验比较
BZOJ4013实际上是给出一个森林,等号的条件用并查集缩起来,把每个森林的根连向0号节点就是一棵树,要给出一个序列使得父亲严格在儿子前面,考虑树形DP,f[i][j]f[i][j]f[i][j]表示子树iii中的排列有恰好jjj个小于号的方案数,每次加入一个v的一个子树y形成一个恰好kkk个小于号的排列的转移就是tmp[k]=∑i=1siz[v]∑j=1siz[y]f[v][i]∗f[y][...原创 2019-09-05 18:47:54 · 125 阅读 · 0 评论 -
[BZOJ5323][线性筛][组合数学]JXOI2018:游戏
BZOJ5323很简单,我们类似线性筛处理出有多少个数只能被它自己筛掉,然后剩下的组合数随便算一下就完了枚举最后一个只能被自己筛掉的数的位置,然后其他的这样的数只能放它前面,再乘两个全排列就是答案Code:#include<bits/stdc++.h>#define mod 1000000007using namespace std;inline int read(){...原创 2019-09-09 21:47:36 · 153 阅读 · 0 评论