组合数学
lamentropetion
---
展开
-
【计数DP】牛客小白月赛19
然后看影响决策的因素:两边的火焰情况,那就 dp[i][0/1][0/1]表示 前 i 个,该位有无火焰,该位右边有无火焰的方案数。然后状态设计,先设 dp[i]首先做法一定是计数 dp。这样设状态也可以算贡献。然后一定就是分类讨论了。原创 2023-12-23 23:24:08 · 666 阅读 · 0 评论 -
【组合计数】CF1866 H
设 f[x] 为恰好有一个最大值为 x 的方案数,我们要求这个,那就设 g[x] 为 至少有一个最大值为 x 的方案数,那么答案就是 f[x] = g[x] - g[x - 1]不知道这种trick叫什么,昨天VP刚遇到过。这里也一样,不过要稍微变一下。原创 2023-10-26 23:02:47 · 452 阅读 · 0 评论 -
【计数DP】CF1794D
所以还剩下 n - (sum - j) 个位置,也就是说,在 n - (sum - j) 个位置中选 y 个位置,那就是 C(n - (sum - j), y)问题就是出在这里,我不知道怎么求组合数,一心想着对于指数求可重集排列,但是这么多的指数的个数是很难维护的。然后就是考虑转移,这种计数类的dp在转移的时候都是考虑多一格会多出多少贡献,贡献一般由组合数求出。前缀已经选了 j 个底数,设前缀的个数和为 sum,那么前缀有 sum - j 个数作为指数。设多出来那一格的数为 x, 它的个数为 y。原创 2023-10-25 01:08:24 · 350 阅读 · 0 评论 -
【枚举子序列+组合数学+推式子】Cf Edu11 E
【代码】【组合数学+推式子】Cf Edu11 E。原创 2023-09-06 11:05:28 · 202 阅读 · 0 评论 -
【组合计数 or 树DP】2021 icpc 上海 G
【代码】【组合计数 or 树DP】2021 icpc 上海 G。原创 2023-09-01 00:33:02 · 197 阅读 · 0 评论 -
【组合数学】CF1312 D
【代码】【组合数学】CF1312 D。原创 2023-08-19 00:59:57 · 119 阅读 · 0 评论 -
【组合数学】CF1622 D
事实上,观察样例可知,如果一个小区间被包含在大区间里面,那么我们需要计算的是大区间的贡献。一开始想的是找出所有1的个数为 k 的区间,然后进行区间合并,对合并后的区间计算贡献。但是这样考虑有交叉的区间就很有问题,那么有交叉的区间该怎么考虑。对于交叉的部分计算了两遍,因此需要减掉重复的部分。所以只需要找出大区间即可。原创 2023-08-17 17:37:25 · 187 阅读 · 0 评论 -
【枚举边+MST+组合计数】CF1857G
可以发现对于每一对点,贡献是 s - 这对点对应的环的最大边 + 1。然后,根据惯用套路,枚举树上的点对问题可以转化为枚举边,按边去算贡献。在Kruskal的过程中,一条边是作为最大边出现的,贡献是。那么这样就有了 n^2 的做法。原创 2023-08-15 15:25:09 · 180 阅读 · 1 评论 -
【枚举倍数+容斥】CF803 F
很显然,设该 gcd 的个数为 sum,那么每个数都有选和不选,方案数就是 (1原创 2023-08-14 14:07:12 · 87 阅读 · 0 评论 -
【枚举+推式子】牛客小白月赛 63 E
组合数学就是在考虑枚举所有包含1和n的区间。这个典中典就是枚举1和n的位置然后算贡献。首先是个计数问题,考虑组合数学。原创 2023-08-12 19:05:14 · 408 阅读 · 0 评论 -
【组合计数】CF1151E
对于每条边,它包含在区间的条件是ai和ai-1都在[l,r]范围内,贡献为min(a[i],a[i-1])*(N-max(a[i],a[i-1])+1)对于每个点,它包含在区间的条件是ai在[l,r]范围内,因此贡献为ai*(N-ai+1)一个是枚举右端点r,然后计算左端点l的贡献。我们要统计区间数量,有两个思考方向。对于点和边我们去单独计算贡献。还有一个就是,更换枚举对象。连通块数量=点数-边数。因为答案是连通块数量。原创 2023-08-02 10:53:33 · 193 阅读 · 0 评论 -
【树上乘法原理】ICPC Shanghai 2021 G, Edge Groups
手摸一下样例发现,对于一棵子树,若边数为偶数,那么可以内部匹配,但是如果边数为奇数,那么就一定需要u和fa那条边和子树的边匹配。若多出来K条边,由乘法原理知道,方案数为(K-1)*(K-3)*....如果边数还为奇数,那么就和u和fa这条边匹配。求方案数,考虑组合数学。将多出来的边进行匹配。原创 2023-07-27 23:03:40 · 138 阅读 · 0 评论 -
【算组合数】CF1833 F
观察一下样例可知,排序后我们可以双指针一下,然后方案数就是区间map之积。给定一个数列,让你在这个数列里找一个大小为M的子集,使得极差不超过M。子集,不是子序列,说明和顺序无关,因此可以考虑排序。原创 2023-07-23 21:52:55 · 235 阅读 · 0 评论 -
【枚举+容斥】牛客练习赛113 F
我们去枚举子序列的长度和在子序列中出现次数>=(d+1)/2的元素是哪个,然后再去枚举这个元素在。但是这样算出来的答案,对于[1,1,2,2]这种数列会算两次,因此需要容斥一下,减去这部分的贡献。况且数据范围是200,更是暴力。这道题做法是枚举+算组合数。的出现次数,然后去算组合数。原创 2023-07-08 11:25:39 · 176 阅读 · 0 评论 -
【组合数学 or 枚举】逆序对
我们去枚举位,一共最多1e18位(不是指真的枚举,是按位去计算贡献)组合数学,无非两种做法,一种是计数DP,另一种是组合数。考虑组合数的时候可以把这道题变成一个枚举题。DP显然不可能,那就组合数。原创 2023-07-06 20:03:02 · 114 阅读 · 0 评论 -
【推式子 二项式定理】Wannafly挑战赛 B
【代码】【推式子 二项式定理】Wannafly挑战赛 B。原创 2023-07-02 01:13:27 · 111 阅读 · 0 评论 -
【树形DP+可重集排列】至至子的公司排队
关于计数类的树形DP,都可以把一棵子树的所有状态想象成一列,然后多棵子树进行匹配(乘法原理)先是乘法原理把所有儿子的dp值乘起来,然后注意到对于同一棵子树的拓扑序而言,顺序是确定的,那么森林的方案数怎么求呢?其实就是把这么多棵树看作子树,再求一下可重集排列即可。设dp[u]为,以u为根的子树的拓扑序的种类数,然后去考虑它的子树。其实题目问的就是,森林的拓扑序有几种。那么我们先去考虑一棵树的拓扑序有几种。这点很重要,我根本没想到这点qwq。这个可以用树形DP来解决。原创 2023-06-18 11:59:39 · 617 阅读 · 0 评论 -
【DP】代码源每日一题div2 一个大整数
可以发现,这道题本质上是让我们把这个唯一分解分成三个集合:一个是不选,一个是放集合1,一个是放集合2。放集合1或放集合2:是不是还应该决定该放多少进去,因此需要乘个ci。注意到了线性结构和三个决策,就应该想到线性DP....设dp[i]为1到 i 的互质因子对的个数。不选的话,dp[i]+=dp[i-1]因此转移方程就写好了。原创 2023-06-16 16:54:15 · 44 阅读 · 0 评论 -
【树上计数 乘法原理】ABC129 E - Virus Tree 2
第二个想法是容斥,先算出所有涂色方案是K^N,然后减去存在d=1的同色的,再减去d=2的同色的,然后加上d=1且d=2的同色的,然后发现这好像更难算了。可以发现,深度为1的方案数是K,深度为2的方案数是K-1,其他的深度的最左边的点都是K-2,然后方案数随着从左到右递减。一开始很自然地想到了树形计数DP,但是很不幸,N,K<=1e5,爆空间了,因此考虑组合计数。然后就不会了,事实上,模拟一下第二个样例就会发现,这个就是乘法原理而已。所以可以直接乘法原理了。原创 2023-06-09 11:15:10 · 55 阅读 · 0 评论 -
【组合数+字典序】ABC202 D
对于这道题,我们遍历位,对于每一位,怎么去判断是a还是b呢,那就看,如果填b的字典序和K比较,如果K大,那么就一定是b,否则就是a。那么我们怎么得到该位置填a或者填b的字典序呢,考虑算组合数,即在剩下的位置填a的方案数,那就是C(N-i,a-1)了。填了a或者b之后,记得更新A或者B的数量。原创 2023-06-06 17:33:31 · 51 阅读 · 0 评论 -
【容斥+扫描线】2023CCPC河南省赛 I 数正方形
【代码】【容斥+扫描线】2023CCPC河南省赛 I 数正方形。原创 2023-06-05 16:33:47 · 161 阅读 · 0 评论 -
【组合数学+插板法】CF893E
【代码】【组合数学+插板法】CF893E。原创 2023-05-30 18:14:15 · 129 阅读 · 0 评论 -
【容斥+完全背包】P1450 [HAOI2008] 硬币购物
【代码】【容斥+完全背包】P1450 [HAOI2008] 硬币购物。原创 2023-05-20 16:59:21 · 78 阅读 · 0 评论 -
【容斥+状压+树上异或】ABC152 F - Tree and Constraints
给定一棵树,可以给每一条边都染成黑色或白色,给定Q个要求,每个要求都包含两个数u和v,表示u和v这条路径中至少需要一条边被染成黑色,要同时满足这Q个要求,问染色方案数。该状态对应的组合数就是(1ll原创 2023-05-18 09:53:41 · 291 阅读 · 0 评论 -
【换根DP+容斥】P3047 [USACO12FEB]Nearby Cows G
预处理dp[v][j]用普通的树形DP处理即可。原创 2023-05-16 19:52:12 · 86 阅读 · 0 评论 -
【线性容斥】最后的晚餐dinner
【代码】【线性容斥】最后的晚餐dinner。原创 2023-05-15 21:22:33 · 77 阅读 · 0 评论 -
【计数DP】ABC230 F - Predilection
【代码】【计数DP】ABC230 F - Predilection。原创 2023-05-11 12:02:06 · 42 阅读 · 0 评论 -
【计数DP】子序列个数
ai在1e6之内,因此ai可以放在数组中。原创 2023-05-10 16:42:34 · 41 阅读 · 0 评论 -
【组合数学--容斥】CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) D. Count GCD
推到最后就是求在区间[1,m/a[i+1]中有多少k2满足以下条件,gcd(k1,k2)=1,k1是一个定值。这就是容斥原理的板子了。原创 2023-05-10 16:40:07 · 52 阅读 · 0 评论 -
【组合数学+二叉树】ABC220 E - Distance on Large Perfect Binary Tree
该结点只会存在于前n-max(l,d-l)层的树上,因此有(2^n-max(l,d-l))-1种情况。这些确定了之后,由于往下走是往左还是往右不确定,因此也要计数。因为2e6的数据,大概率复杂度就是O(d)的。考虑枚举路径所经最高层结点的左右链分配的长度。2^N-1很大很大,因此肯定是组合计数问题。设左链长度为l,右链为d-l。然后结点位置还不确定。原创 2023-05-06 16:01:26 · 101 阅读 · 0 评论 -
【MST+枚举+组合数学】ABC214 D - Sum of Maximum Weights
因为N^2枚举两个结点一定会超时,因此考虑改变枚举对象,我们去枚举边,然后对于每条边都去计算贡献。对于每一条边,当它作为最大边时,贡献就应该加上该边一段结点个数*另一端结点个数。这个非常经典,在今天刚做的某一道题中也碰到过了。就是去考虑Kruskal的过程就好了。那么,怎么让它作为最大边呢?边Kruskal边计算贡献。原创 2023-05-01 21:26:16 · 73 阅读 · 0 评论 -
【构造+组合计数】EDU145div2 C. Sum on Subarrays
因为要k个子串,因此求最大的满足k*(k+1)/2原创 2023-05-04 19:31:42 · 224 阅读 · 0 评论 -
【组合数学】EDU143 D. Triangle Coloring
大差不差,但是缺了一种情况:等腰三角形的时候。总方案数=大方案数*小方案数。原创 2023-05-05 15:03:34 · 71 阅读 · 0 评论 -
【组合数学算贡献+枚举】CF816div2 C. Monoblock
a[i-1],那么加上i左边的所有端点1~i对应的所有区间贡献都,即+=i。对于相邻的len-1和len,贡献能不能O(1)或O(logn)计算。但是我想的是枚举区间长度,然后对于每个长度len计算贡献。否则总贡献就加上[i,i]这个区间对应的贡献,即+1。也想到了修改操作与(a[i]和a[i-1])有关。只能说,想到了更换枚举对象,然后组合数学算贡献。应该去枚举的是每个端点包含的所有区间的贡献。然后去考虑每次修改对总贡献的影响。先去考虑怎么计算初始价值。事实上枚举的对象都错了。原创 2023-05-03 21:10:20 · 758 阅读 · 1 评论 -
【贪心+组合数学】CF697div3 E
CFdiv3 E原创 2023-02-08 16:34:26 · 83 阅读 · 0 评论 -
【bitmask】牛客挑战赛 B 清新题
bitmask原创 2022-10-06 15:35:00 · 342 阅读 · 0 评论 -
【bitmask】牛客挑战赛 A pair
bitmask原创 2022-10-06 16:01:39 · 321 阅读 · 0 评论