容斥原理
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
hdu5791 Two(dp求公共子序列个数)
求两个序列的公共子序列个数,dp[i][j]表示a序列前i个和b序列前j个公共子序列个数。由容斥原理dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]。特别的,如果a[i]==b[j],会创造更多的公共子序列,即dp[i][j]+=dp[i-1][j-1]+1.(不带a[i],b[j]的公共子序列都在加上a[i],b[j]构成新的公共子序列,再加上1个a[i],b原创 2017-08-16 16:36:46 · 461 阅读 · 0 评论 -
bzoj3622 已经没有什么好害怕的了(dp+容斥原理)
首先设a组糖果比药片大,b组药片比糖果大,然后要求a-b=K,a+b=n,显然有a=(n+K)/2 于是就是求恰好a组糖果比药片大的方案数。 我们dp处理出至少j组的”方案数” 首先把a,b数组均排序,处理出每个糖果i大于的药片个数w[i],然后f[i][j]表示前i个糖果,选出了j组符合条件的。 f[i][j]=f[i−1][j]+f[i−1][j−1]∗(w[i]−j+1)f[i][j...原创 2018-06-20 17:20:42 · 283 阅读 · 0 评论 -
bzoj3812 主旋律(图论+状压dp+容斥原理)
题目给出一个 n 个点,m 条边的有向图,要求求出删掉一些边以后,整个图强联通的方案数,其中 n≤15,m≤n(n−1) 好难啊qaq 题解传送门:portal 实现上也有一些技巧要注意qaq#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#def...原创 2018-06-20 15:14:03 · 312 阅读 · 0 评论 -
bzoj4455 [Zjoi2016]小星星(容斥原理+状压枚举+树形dp)
首先我们有一个树形状压dp的想法,f[x][i][S]表示x节点,匹配原图的i节点,子树匹配了原图S状态的点的方案数,这样可以保证一一对应,不重不漏,可惜复杂度高达O(n33n)O(n33n)O(n^33^n),无法承受。 我们考虑容斥,用树上n个点匹配原图n个点的所有方案-匹配原图n-1个点的所有方案+匹配原图n-2个点的所有方案-… 于是我们O(2n)O(2n)O(2^n)枚举原图的一个点...原创 2018-06-20 10:03:38 · 218 阅读 · 0 评论 -
bzoj4710 [Jsoi2011]分特产(容斥原理+组合数学)
题目要求有0个人有0个。 我们枚举有i个人有0个来容斥,其余的人随意分,用插板法来计算方案数。 Ans=∑i=0n−1(−1)iCin∏j=1mCn−i−1aj+n−i−1Ans=∑i=0n−1(−1)iCni∏j=1mCaj+n−i−1n−i−1Ans=\sum\limits_{i=0}^{n-1}(-1)^iC_n^i\prod\limits_{j=1}^mC_{a_j+n-i-1}^{n...原创 2018-06-20 08:18:13 · 306 阅读 · 0 评论 -
bzoj5306 [Haoi2018]染色(容斥原理+ntt)
一个不会数数的老年咸鱼选手的学习经历x首先我很快的得到了一个式子:Cim∗n!(s!)i∗(n−is)!∗(m−i)n−isCmi∗n!(s!)i∗(n−is)!∗(m−i)n−isC_m^i*\frac{n!}{(s!)^i*(n-is)!}*(m-i)^{n-is} 但是我说不出它的意义…感觉很重复x,需要容斥x 然后就傻掉了gg其实可以按套路来,给每一项设一个容斥系数b[i], ...原创 2018-06-19 22:55:56 · 324 阅读 · 0 评论 -
bzoj2830/luogu3830 随机树(期望与概率dp)
首先第一问,我们设f[i]f[i]f[i]表示i个叶子的树的叶子平均深度的期望 那么有转移f[i]=f[i−1]∗(i−1)−f[i−1]+(f[i−1]+1)∗2if[i]=f[i−1]∗(i−1)−f[i−1]+(f[i−1]+1)∗2if[i]=\frac{f[i-1]*(i-1)-f[i-1]+(f[i-1]+1)*2}{i} 即f[i]=f[i−1]+2/if[i]=f[i−1]+2...原创 2018-06-15 16:19:57 · 362 阅读 · 0 评论 -
bzoj4767 两双手(dp+容斥+组合数学)
在二维平面上,你一开始在(0,0),给定两个向量,问你有多少种不经过坏点的方式到达(x,y)。 对于每一个点都求出需要走几个向量1,几个向量2,显然是唯一的。如果不合法直接跳过。 然后就转化成了类似上一题的模型。dp+容斥+组合数学解决。#include <bits/stdc++.h>using namespace std;#define ll long long#def...原创 2018-06-01 14:29:58 · 312 阅读 · 0 评论 -
bzoj3782 上学路线(dp+容斥+组合数学+Lucas+CRT)
把终点也视为一个坏点的话,f[i]表示到达坏点i且不经过其他坏点的方案数。直接计算f[i]比较困难,考虑容斥。 可以通过组合数学方便的得到从一个点到另一个点的总方案数。那么我们可以再枚举经过的第一个坏点来减去不合法的方案。 这里算组合数需要Lucas定理,1019663265=3*5*6793*10007不是质数,但好在次数都是1,我们对每一个质因子算一下再CRT合并起来即可。 复杂度O(n...原创 2018-06-01 11:45:51 · 325 阅读 · 0 评论 -
bzoj2986 Non-Squarefree Numbers(Mobius函数+容斥+二分答案)
其实和bzoj2440一模一样。 就是利用Mobius函数来容斥就好了#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 500010inline char gc(){ static char buf[1<<16...原创 2018-06-22 16:57:52 · 212 阅读 · 0 评论 -
bzoj2393 Cirno的完美算数教室(容斥原理+dfs)
和bzoj1853基本一模一样,因为是2和9还更少了些合法数字…#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 2100inline char gc(){ static char buf[1<<16],*S,*...原创 2018-06-22 16:25:00 · 327 阅读 · 0 评论 -
bzoj1853 [Scoi2010]幸运数字(容斥原理+dfs)
我们发现纯幸运数字只有2046个,而去掉倍数之后只剩了943个。 我们直接容斥,暴力枚举就好了qaq 注意剪枝,从大到小枚举,求lcm避免爆ll等玄学技巧就好了qaq#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 2100in...原创 2018-06-22 16:21:25 · 313 阅读 · 0 评论 -
bzoj5366 [Lydsy1805月赛]代码派对(容斥+差分+二维前缀和)
给定n个矩形,问至少覆盖了一个公共点的三元组(i,j,k)(i< j< k)有多少个。 矩形的交还是矩形。我们先差分+二维前缀和算出每一个位置被覆盖的次数bijbijb_{ij},答案就是∑C3bij∑Cbij3\sum\limits C_{b_{ij}}^3 但是这样会算重。我们考虑三个矩形i,j,k,它们的交也是一个矩形,在这个矩形的每一个位置上我们都计算了这个三元组的贡献。我...原创 2018-05-28 12:00:51 · 596 阅读 · 0 评论 -
bzoj3930 [CQOI2015]选数(容斥+递推+数论)
首先我们有:在[l,R]中选若干不完全相同的数,他们的gcd<=R-L。反证即可。 我们设f[i]表示gcd恰好为K*i的个数。(选若干不完全相同的数),考虑容斥计算,倒着推即可。 f[i]=(R-L)^n-(R-L)-f[i*j] (R=r/(ki),L=(l-1)/(ki)) 最后特判一下是否可以是完全相同的K。 复杂度O(nlogn)O(nlogn原创 2018-05-06 21:29:03 · 265 阅读 · 0 评论 -
bzoj4011 [HNOI2015]落忆枫音(拓扑序dp+容斥原理+朱刘算法)
大爷题解传送:http://blog.csdn.net/popoqqq/article/details/45194103原创 2018-02-01 14:18:40 · 341 阅读 · 0 评论 -
bzoj2440 [中山市选2011]完全平方数(二分答案+莫比乌斯反演)
类似vijos1889。原创 2017-10-13 11:43:26 · 403 阅读 · 0 评论 -
bzoj2301 [HAOI2011]Problem b(求gcd==k的个数)(莫比乌斯反演+容斥原理)
首先我们搞掉下界,怎么搞呢,用容斥原理即可。(看做矩形区间),然后我们需要求∑x=1n∑y=1ngcd(x,y)==k\sum\limits_{x=1}^n\sum\limits_{y=1}^ngcd(x,y)==k。 ∑x=1⌊n/k⌋∑y=1⌊m/k⌋gcd(x,y)==1\sum\limits_{x=1}^{\lfloor{n/k}\rfloor}\sum\limits_{y=1}^{\lf原创 2017-10-10 14:39:41 · 1371 阅读 · 1 评论 -
vijos1889 天真的因数分解(莫比乌斯反演+二分答案)
求第k个mu为0的数,k<=1e10,所以O(n)肯定也挂。考虑不合格的数,就是含有一个平方因子的数。设F(x)表示1~x中不合格的数,则根据容斥原理,利用莫比乌斯函数,我们可以得到F[x]=−∑i=2x√⌊x/i2]∗μ(i)F[x]=-\sum\limits_{i=2}^{\sqrt x}\lfloor x/{i^2}]*\mu(i),然后就是喜闻乐见的分块啦~(直接暴力算也是可以的。。。)复杂原创 2017-10-11 16:02:34 · 441 阅读 · 0 评论 -
bzoj4558 [JLoi2016]方(容斥原理,计数,Hash)
这容斥真是写的我心态爆炸… 考虑用至少0个坏点的-至少1个坏点的+至少两个坏点的-至少三个坏点的+至少四个坏点的。 我们发现对于斜着的正方形,可以直接在框住它的大正方形处计数,边长为i的大正方形内就有i个正方形。 且我们发现每个点出现且仅出现在一个正方形上。因此对于至少一个坏点的正方形,我们只需要统计过一个坏点的正方形框架个数即可。然后就是毒瘤的分类讨论!至少两个三个四个的可以通过枚举两...原创 2018-07-13 23:27:23 · 374 阅读 · 0 评论