计数dp
文章平均质量分 84
ez_lcw
这个作者很懒,什么都没留下…
展开
-
【CTS2019】珍珠(计数,容斥,NTT)
题意:称一个长度为 nnn,值域为 [1,D][1,D][1,D] 整数序列为合法序列,当且仅当序列中能选出 mmm 对数相等。问合法序列数。1≤D≤105,1≤n,m≤1091\leq D\leq 10^5,1\leq n,m\leq 10^91≤D≤105,1≤n,m≤109。题解:设 cic_ici 表示数 iii 在序列中的出现次数,那么限制转化成:∑i=1D⌊ci2⌋≥m\sum_{i=1}^D \lfloor\frac{c_i}{2}\rfloor\geq mi=1∑D⌊2ci原创 2021-11-27 16:38:20 · 311 阅读 · 0 评论 -
【WC2019】数树(prufer序列,树上连通块DP,多项式exp)
设两棵树的边集分别为 E1,E2E_1,E_2E1,E2,那么两棵树不同当且仅当它们对应的边集不同。转化一下可以发现,染色方案等于 yn−∣E1∩E2∣y^{n-|E_1\cap E_2|}yn−∣E1∩E2∣,即由边集 E1∩E2E_1\cap E_2E1∩E2 构成的图的连通块数量。k=1k=1k=1ans=∑E2yn−∣E1∩E2∣ans=\sum_{E_2}y^{n-|E_1\cap E_2|}ans=E2∑yn−∣E1∩E2∣考虑枚举 S=E1∩E2S=E_1\ca原创 2021-11-08 15:02:29 · 324 阅读 · 0 评论 -
五边形数定理和整数划分问题
五边形数:形如 k(3k−1)2\frac{k(3k-1)}{2}2k(3k−1) 的数,其中 kkk 为任意整数(可以为负)。定义欧拉函数:(与 φ(n)\varphi(n)φ(n) 为小于等于 nnn 的正整数中与 nnn 互质的数的个数不同)ϕ(x)=∏i=1∞(1−xi)\phi(x)=\prod_{i=1}^{\infty}(1-x^i)ϕ(x)=i=1∏∞(1−xi)五边形数定理:ϕ(x)=∑k=−∞∞(−1)kxk(3k−1)2=1+∑k=1∞(−1)kxk(3k±1)2\p原创 2021-11-02 19:16:32 · 301 阅读 · 0 评论 -
错排数计数
定义:∀i∈[1,n],pi≠i\forall i\in[1,n],p_i\neq i∀i∈[1,n],pi=i 的长度为 nnn 的排列数。一开始看到的时候还想用容斥推:∑i=0n(ni)(−1)i(n−i)!\sum\limits_{i=0}^n\binom{n}{i}(-1)^i(n-i)!i=0∑n(in)(−1)i(n−i)!,结果发现太垃圾了。递推法设 D(n)D(n)D(n) 表示长度为 nnn 的错排数,考虑枚举数 nnn 放在了第 iii 个位置(1≤i≤n−11\leq原创 2021-10-30 10:22:14 · 470 阅读 · 0 评论 -
【LOJ6077】【2017 山东一轮集训 Day7】逆序对(排列计数DP,容斥,旋转体积背包)
搞不懂排列计数。一种计数方法是考虑从小往大往当前排列中插入每个数,存在一次插的位置不同那么最后的结果也不同。那么考虑插入 iii 时,对于 x∈[0,i−1]x\in[0,i-1]x∈[0,i−1] 均有且仅有一种方法使得逆序对个数增加 xxx。法一:考虑 DP,设 fi,jf_{i,j}fi,j 表示插入了 iii 个数,已经有 jjj 个逆序对的方案数,那么有转移 fi,j=∑l=0i−1fi−1,j−lf_{i,j}=\sum\limits_{l=0}^{i-1}f_{i-1,j-l}fi,原创 2021-10-29 22:02:17 · 279 阅读 · 0 评论 -
【UOJ424】count(笛卡尔树,DP,生成函数,矩阵快速幂)
首先可以发现两个序列 A,BA,BA,B 同构当且仅当它们的笛卡尔树同构。那么可以考虑枚举笛卡尔树,然后判断它能否构成满足题目条件的序列。发现一棵笛卡尔树满足条件当且仅当它有 nnn 个节点~~(废话)~~,而且它的最长左链长度不超过 m−1m-1m−1。定义一条链的左链长度为这条链上向左的边数,一棵树的最长左链长度为这棵树所有从根到叶子的链的左链长度的最大值。那么就可以 DP 了:设 fn,mf_{n,m}fn,m 表示 nnn 个点、最长左链长度+1不超过 mmm 的笛卡尔树个数。这里定义状原创 2021-10-18 17:04:34 · 211 阅读 · 0 评论 -
【XSY3032】画画(Burnside引理,计数)
为了方便,我们肯定是先考虑有标号图的个数,再用 Burnside 引理去重,但是用 Burnside 引理时得先考虑清楚映射集合 XXX 是哪个集合 AAA 到哪个集合 BBB 的哪些映射,以及作用在 AAA 上的置换群 GGG 是什么。首先考虑两张有标号图等价的定义:存在一个置换使得第一张图在置换作用后得到的图与第二张图完全相同,也就是说任意一条边 (u,v)(u,v)(u,v) 要么在两者中同时存在,要么在两者中同时不存在。那么自然地就能理清映射关系:XXX 是由大小为 n×(n−1)2\dfrac原创 2021-10-09 21:51:41 · 104 阅读 · 0 评论 -
【LOJ3395】【2020-2021 集训队作业】Yet Another Permutation Problem(容斥,生成函数,多项式)
题目相当于让我们考虑某种排列最少能经过几次操作得到。操作是从 1∼n1\sim n1∼n 的顺序排列中抽取若干个元素放到排列头和尾,那么假设进行了 lll 次操作,1∼n1\sim n1∼n 中还会剩下至少 n−ln-ln−l 个元素没有被抽取,也就是说这个排列的最长连续上升段长度至少是 n−ln-ln−l。也就是说经过 lll 次操作能得到某个排列 ppp 的必要条件是 ppp 的最长连续上升段的长度至少是 n−ln-ln−l。显然这个条件也是充要条件:假设某个排列 ppp 的最长连续上升段的长度大原创 2021-09-26 11:55:30 · 556 阅读 · 0 评论 -
【AGC001E】BBQ Hard(图论,dp)
题意:求 ∑i=1n∑j=1i−1(Ai+Aj+Bi+BjAi+Aj)\sum\limits_{i=1}^n\sum\limits_{j=1}^{i-1}\dbinom{A_i+A_j+B_i+B_j}{A_i+A_j}i=1∑nj=1∑i−1(Ai+AjAi+Aj+Bi+Bj),n≤2×105n\leq 2\times 10^5n≤2×105,Ai,Bi≤2000A_i,B_i\leq 2000Ai,Bi≤2000。显然是从 Ai,Bi≤2000A_i,B_i\leq 2000Ai原创 2021-09-01 20:02:56 · 170 阅读 · 0 评论 -
【XSY3657】因数分解(容斥,DP)
考虑没有 bib_ibi 的限制怎么做。先把 n!n!n! 质因数分解:n!=∏i=1kpiqin!=\prod\limits_{i=1}^kp_i^{q_i}n!=i=1∏kpiqi。设 bi=∏j=1kpjxi,jb_i=\prod\limits_{j=1}^kp_j^{x_{i,j}}bi=j=1∏kpjxi,j,那么 biai=∏j=1kpjaixi,jb_i^{a_i}=\prod\limits_{j=1}^kp_j^{a_ix_{i,j}}biai=j=1∏kpjai原创 2021-08-07 16:59:09 · 240 阅读 · 0 评论 -
【XSY3270】Domino Colorings(轮廓线dp,状压)
若已经知道了每个格子的颜色,我们可以用轮廓线 DP(类似插头 DP)判断棋盘是否能被多米诺骨牌填满,设 dp[S]dp[S]dp[S] 表示是否存在某种填法使得轮廓线每个位置是否被填的状态为 SSS 即可。现在我们需要枚举每个格子的颜色,同时还要判断能否被填,所以我们要记录一维表示 dp[S]dp[S]dp[S] 数组。为了转移时维护这一数组,我们还要记录轮廓线上每个格子的颜色。于是设 f(i,j,c,s)f(i,j,c,s)f(i,j,c,s) 表示考虑到 (i,j)(i,j)(i,j),轮廓线上格原创 2021-07-23 16:42:41 · 242 阅读 · 1 评论 -
【bzoj3812】【清华集训2014】主旋律(容斥,计数)
毒 瘤 计 数!XSY 题意不是很清楚,这里给出更加清楚的:给定一张 nnn 个点 mmm 条边的无向图,保证该图整个图为一个强联通分量,且无重边自环。现在需要求出:有多少种删边方案,使得删完边后,整个图依旧是一个强联通分量。数据范围:n≤15,m≤n(n−1)n\leq 15,m\leq n(n-1)n≤15,m≤n(n−1)。记 E[U,V]E[U,V]E[U,V] 表示题目给的所有边中,起点在 UUU 中、终点在 VVV 中的所有边的集合,其中 U,VU,VU,V 为点集。对于一个点集 SSS原创 2021-07-21 09:34:35 · 261 阅读 · 0 评论 -
【XSY3908】迷宫(置换,图论,计数dp)
题面迷宫题解不妨把只由左向边形成的图称为 “左图”,那么 “右图” 的定义同理。如果只从图论的角度推,还是能推出来很多东西的。比如:当 X=Y=Z=0X=Y=Z=0X=Y=Z=0 时,右图能任意连,而左图只能是一些环。否则,左图和右图都只能是环。但你发现接下来很难dp。所以考虑用数学表示图论,这样就有很多性质了。具体来说,我们把右图看成一个映射 fff,左图看成一个映射 ggg,那么题目就是要求 fXgfYgfZ=idf^Xgf^Ygf^Z=idfXgfYgfZ=id。当 X=Y原创 2021-05-05 11:16:07 · 164 阅读 · 0 评论 -
【XSY3997】方格计数(容斥,dp)
题面方格计数题解拼命容斥即可。先考虑 k=0k=0k=0 的情况。首先先对对角线的限制容斥,即用 “没有限制-正对角线没选-反对角线没选+正反对角线都没选”。设 ZZZ 中对角线不能选,设 ZZZ 中对角线上的格子组成的集合为 PPP。然后对行、列也用类似的方式容斥,设 XXX 中的行和 YYY 中的列不能选,那么答案即为:∑(−1)∣X∣+∣Y∣+∣Z∣(∣{(i,j)∣i∉X,j∉Y,(i,j)∉P}∣c)\sum(-1)^{|X|+|Y|+|Z|}\binom{\big|\{(i原创 2021-04-08 08:21:25 · 185 阅读 · 0 评论 -
【XSY3952】简单的计数题(dp)
题面简单的计数题题解首先题意可以转化为:给你一个长度为 nnn 的序列 ccc,求将 ccc 分成两个长度为 n2\dfrac{n}{2}2n 的相同的子序列的方案数。考虑 dp,设 f(i,sta)f(i,sta)f(i,sta) 表示已经将 ccc 的前 iii 位分成了两个子序列,其中长的子序列比短的子序列多出来的未匹配的部分为 stastasta(用 deque、list等STL容器均可记录)的方案数。不妨称这个 stastasta 为状态,那么只有当状态长度不大于 n2\dfrac{n}原创 2021-03-16 07:55:12 · 150 阅读 · 0 评论 -
【XSY3929】PQ 树(区间dp)
题面PQ 树题解注意到题目中提到了 “合法的 PQ 树都能表示出 1,2,3,⋯ ,n1,2,3,\cdots,n1,2,3,⋯,n 这个排列"。那么如果我们把所有叶子节点按它们的数字按 1∼n1\sim n1∼n 从左到右排,形成的 PQ 树是没有相交边的,也就是说不会出现这种情况:你也可以理解成一棵子树一定存着的是一段连续的数字区间(顺序不一定是有序的)。不难发现如果此时两课 PQ 树的形态不同,他们能表示出来的集合也不同。那我们考虑区间dp,设 f(i,j)f(i,j)f(i,j) 表示原创 2021-03-10 15:18:27 · 213 阅读 · 0 评论 -
【XSY3892】【hihocoder1147】时空阵(分层图dp)
设 dp(i,t,l)dp(i,t,l)dp(i,t,l) 表示已经定好前 iii 层,共有 ttt 个节点,其中第 iii 层有 lll 个节点。直接转移即可,注意一些细节:第 111 层只有 111 号节点。同层之间可以乱连,相邻层之间可以乱连,跨层之间不能连。需要钦定 nnn 号点在第 m+1m+1m+1 层。#include<bits/stdc++.h>#define N 110#define ll long long#define mod 100000原创 2021-02-07 11:08:33 · 199 阅读 · 0 评论 -
【AGC013D】Piling Up(神奇的dp)
考场上用了一种奇怪的做法,不知道为什么就对了,考完后仔细想才想明白。很巧妙的一种 dp 方式。首先发现每次操作是拿一个球、放两个球、再拿一个球,总球数不变,所以有 黑球数=n−白球数\text{黑球数}=n-\text{白球数}黑球数=n−白球数。那么可以设 dp(i,j)dp(i,j)dp(i,j) 表示 iii 次操作后,当前箱子里白球还剩 jjj 个所得到的的颜色序列的情况数。显然有状态转移:dp(0,i)=1dp(0,i)=1dp(0,i)=1,0≤i≤n0\leq i\leq n0≤原创 2020-10-17 16:39:25 · 254 阅读 · 0 评论 -
【ARC074E】RGB Sequence(神奇的dp)
注意到颜色的种类数只有 333 种,n≤100n\leq 100n≤100 也很小。然后就有了一种神奇的 dp 状态:考虑从前往后填方块,设 dp(i,j,k)dp(i,j,k)dp(i,j,k) 表示离当前位置最近的颜色位置在 iii,离当前位置第二近的颜色位置在 jjj,离当前位置第三近的颜色位置在 kkk。显然,当前位置就是 iii,所以这样设置帮我们减少了一维。先 O(n2m)O(n^2m)O(n2m) 枚举每一个区间和每一个要求,预处理哪些方案是不合法的,然后直接 O(n3)O(n^3)O(原创 2020-10-17 16:30:52 · 163 阅读 · 0 评论 -
【AGC005D】~K Perm Counting(容斥,二分图,计数dp)
首先正面做不太好做,考虑容斥。设 f(m)f(m)f(m) 表示排列中至少有 mmm 处 ∣Pi−i∣=k|P_i-i|=k∣Pi−i∣=k 的方案数。那么答案就是 ∑i=0n(−1)if(i)\sum\limits_{i=0}^n(-1)^if(i)i=0∑n(−1)if(i)。原题可以看成一个二分图的形式:(n=5n=5n=5 时)左边是排列的编号,右边是权值,那么现在要做的就是连 nnn 条边,补全这个二分图,使得每个点的度数都是 111。那么考虑什么时候会出现 ∣Pi−i∣=k|P_原创 2020-10-04 21:46:00 · 278 阅读 · 0 评论 -
【ARC068F】Solitaire(dp,计数,思维)
首先发现那个双端队列一定长这样:也就是说,这个队列中的数先单调递减,然后再单调递增,最小值为 111。现在考虑从双端队列中取数,那么当我们取到 111 这个数时,我们会在原来的双端队列中取到类似这样的两个数列:(分别用红、蓝表示)那么红、蓝两数列的总长度为 kkk,剩下的就是绿色的一段,长度为 n−kn-kn−k,我们每次可以从两端任意取,共取 n−k−1n-k-1n−k−1 次,方案数为 2n−k−12^{n-k-1}2n−k−1。所以我们只用考虑前 kkk 个数的取法,然后乘上 2n−k−1原创 2020-10-02 16:46:22 · 198 阅读 · 0 评论 -
【BZOJ3622】已经没什么好害怕的了(dp,容斥原理,二项式反演)
首先设有 xxx 组 a>ba>ba>b,由 x−(n−x)=kx-(n-x)=kx−(n−x)=k 解得 x=n+k2x=\dfrac{n+k}{2}x=2n+k。先将 aaa、bbb 数组排序。然后设 f(i,j)f(i,j)f(i,j) 表示前 iii 个 aaa 中,选了 jjj 组 a>ba>ba>b。显然有:f(i,j)=f(i−1,j)+[li−(j−1)]f(i−1,j−1)f(i,j)=f(i-1,j)+\big[l_i-(j-1)\big]f原创 2020-09-23 18:41:29 · 149 阅读 · 0 评论 -
【BJWC2018】上学路线(dp,Lucas,crt)
考虑 dp。我们先把 (n,m)(n,m)(n,m) 也当做障碍点,然后把所有的障碍点按 xxx 坐标为第一关键字,yyy 坐标为第二关键字排序。然后设 fif_ifi 表示到达第 iii 个障碍点的合法总方案数(途中不经过障碍点)。显然,答案就是 ft+1f_{t+1}ft+1,也就是到达 (n,m)(n,m)(n,m) 的总方案数。至于为什么要先排序,是因为我们要保证当处理 fif_ifi 时,能转移到 fif_ifi 的所有 fjf_jfj 都已经处理完了。显然有状态转移方程:(其中原创 2020-09-15 13:33:36 · 264 阅读 · 1 评论 -
【SDOI201】黑白棋 /【XSY3064】小奇的博弈(博弈,nim,dp,组合数)
显然,如果白棋往左,黑棋往右,最后肯定会两两碰在一起,就像这样:红框框起来的是会碰在一起的棋子。(我们把会碰到一起的棋子称为一对棋子)如下图就是碰在一起的一种情况:那么现在假设是 AAA 遇到了这种情况,那么无论他操作的是白棋或黑棋,他肯定会输。因为另一个人可以操控棋子跟着 AAA 的棋子走,一直保持棋子两两紧逼的状态,直到所有棋子都堆在一边,这时 AAA 就无路可走了,失败。不妨设开始前每对棋子之间的距离为 a1,a2,…,ak2a_1,a_2,\dots,a_{\frac{k}{2}}a1原创 2020-08-14 19:09:38 · 197 阅读 · 0 评论