状压dp
_beginend
这个作者很懒,什么都没留下…
展开
-
【洛谷 6789 寒妖王】【状压dp】
题意给一个 nnn 个点 mmm 条边的简单无向图,边有边权。定义一个边集是好的,当且仅当将这些边和与这些边相连的点取出来形成的图没有两个或以上处在同一个连通块的不同的环。同时定义一个边集的权值为边集中所有边的边权之和。每条边有 50%50\%50% 的概率消失,问图中权值最大的好边集的权值的期望。n≤15,m≤60n\le 15,m\le 60n≤15,m≤60分析实际上就是问最大生成环套树森林的期望。考虑按边权从大到小加边,一条边有贡献,当且仅当其两个端点位于的连通块是一棵树,或位于不同的连通原创 2020-08-24 08:14:18 · 562 阅读 · 1 评论 -
【Codeforces 1326F2 Wise Men (Hard Version)】【状压dp+容斥原理】
题意有nnn个点,有些点之间有边。对于111到nnn的每个排列PPP,构造长度为n−1n-1n−1的010101串strstrstr,其中str[i]=1str[i]=1str[i]=1当且仅当pip_ipi和pi+1p_{i+1}pi+1之间有边。对每个长度为n−1n-1n−1的串strstrstr,求有多少个排列构造出来的串等于strstrstr。n≤18n\le 18n≤18分析...原创 2020-03-20 21:43:56 · 436 阅读 · 0 评论 -
AtCoder Grand Contest 012 E - Camel and Oases 状压dp
题意平面上有n个点。初始有V的权值,每次可以从一个点走到与他距离不超过V的点,当V>0时也可以让V/2且到达任意一个点。问从每个点出发能否遍历所有点。 n,V分析显然只有O(logV)" role="presentation" style="position: relative;">O(logV)O(logV)O(logV)种不同的步数。 当权值V" role="present原创 2018-01-25 18:10:18 · 327 阅读 · 0 评论 -
bzoj 3812: 主旋律 状压dp+容斥原理
题意响应主旋律的号召,大家决定让这个班级充满爱,现在班级里面有 n 个男生。 如果 a 爱着 b,那么就相当于 a 和 b 之间有一条 a→b 的有向边。如果这 n 个点的图是强联通的,那么就认为这个班级是充满爱的。 不幸的是,有一些不好的事情发生了,现在每一条边都可能被摧毁。我作为爱的使者,想知道有多少种摧毁的方式,使得这个班级任然充满爱呢?(说人话就是有多少边的子集删去之后整个图仍然强原创 2018-01-15 20:46:34 · 484 阅读 · 0 评论 -
bzoj 4479: [Jsoi2013]吃货jyy 欧拉回路+状压dp
题意世界上一共有N个JYY愿意去的城市,分别从1编号到N。JYY选出了K个他一定要乘坐的航班。除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班。 一个航班我们用一个三元组(x,y,z)来表示,意义是这趟航班连接城市x和y,并且机票费用是z。每个航班都是往返的,所以JYY花费z的钱,既可以选择从x飞往y,也可以选择从y飞往x。 南京的编号是1,现在JYY打算从南京出发,乘坐所有K原创 2018-01-03 16:41:03 · 644 阅读 · 1 评论 -
51nod 1833 环 状压dp+图论
题意有一个有向图。这张图有n个点和m条有向边。 他很好奇不相交的环(简单环)来覆盖所有点的方案数(数字可能很大请模998,244,353)。 1<=n<=20,1<=m<=n*(n-1)分析我好菜呀,比赛的时候一堆人都切了然而我想了一晚上都还是不会。。。其实,不相交的环覆盖数量就相当于把原图变成二分图后完美匹配的方案数。 具体来说就是对于原图中一条i->j的边,变成i->j’。 然后就可以随原创 2017-10-30 07:41:16 · 449 阅读 · 0 评论 -
bzoj 2734: [HNOI2012]集合选数 状压dp
题意《集合论与图论》这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中。同学们不喜欢这种具有枚举性 质的题目,于是把它变成了以下问题:对于任意一个正整数 n≤100000,如何求出{1, 2,…, n} 的满足上述约束条件的子集的个数(只需输出对 1,000,000,001 取模的结果),现在这个问题就原创 2017-10-23 08:41:54 · 279 阅读 · 0 评论 -
51nod 1447 好记的字符串 状压dp
题意现在有n个长度一样的字符串,我们说这些字符串是好记的当且仅当,每一个字符串存在一个位置i,其它字符串在i位置的字符和它不一样。 例如{“abc”, “aba”, “adc”, “ada”}这些字符串是不好记的。 而{“abc”, “ada”, “ssa”}这些是好记的: · 对于第一串,在第3个位置,只有它有c; · 对于第二个串,在第2个位置,只有它有d;原创 2017-10-29 14:57:27 · 526 阅读 · 0 评论 -
bzoj 2004: [Hnoi2010]Bus 公交线路 状压dp+矩阵乘法
题意小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距 离均为1km。 作为公交车线路的规划者,小Z调查了市民的需求,决定按下述规则设计线路: 1.设共K辆公交车,则1到K号站作为始发站,N-K+1到N号台作为终点站。 2.每个车站必须被一辆且仅一辆公交车经过(始发站和终点站也算被经过)。 3.公交车只能从编号较小的站台驶往编号较原创 2017-10-20 15:32:34 · 388 阅读 · 0 评论 -
AtCoder Grand Contest 016 F - Games on DAG SG函数+状压dp
题意给出一个n个点m条边的有向无环图G,可以删掉任意的边得到一个新的图G’,显然这样的图有2m" role="presentation" style="position: relative;">2m2m2^m种。现在两个人在G’上玩游戏:初始在点1和点2上分别有一个标记。每次一个人可以把某个标记沿着某条出边移动。不能移动者输。问在这2m" role="presentation" style="原创 2018-02-02 22:06:04 · 309 阅读 · 0 评论 -
AtCoder Grand Contest 017 F - Zigzag 状压dp
题意给出n和m,求有多少个m位二进制数,满足对于任意相邻的两个,都有i+1的前j位的和不小于i的前j位的和。此外有若干个二进制位上的数已经被确定。 n,m分析很容易想到可以设f[i,s]表示第i个数为s时的方案,转移则需要枚举下一位是什么。 这样子显然会超时,考虑如何优化。 既然不能枚举下一个,那就考虑这一个数和上一个数一起改变好了。 设f[i,j,s]表示做到第i个二进制原创 2018-02-03 13:51:55 · 269 阅读 · 0 评论 -
uoj #214.【UNR #1】合唱队形 min-max容斥+状压dp
题意传送门分析首先考虑如果n=mn=mn=m,有ccc个课堂,假设我们现在已经满足了sss个位置,现在要拓展到s+1s+1s+1个位置,而抽中合法课堂的概率是m−scm−sc\frac{m-s}{c},那么期望步数就是cm−scm−s\frac{c}{m-s},所以答案就是∑i=1mcm−i+1∑i=1mcm−i+1\sum_{i=1}^m\frac{c}{m-i+1} 我们设t...原创 2018-06-25 22:21:34 · 415 阅读 · 0 评论 -
uoj #129.【NOI2015】寿司晚宴 状压dp
提议有n-1个数,分别是2到n。现在有两个人,每个人可以选择其中的若干个数,每个数至多被一个人选择。问有多少种选择方案满足不存在两个不互质的数分别位于不同的人手中。取模。 n≤500n≤500n\le500分析我们把所有素数分成不大于n−−√n\sqrt n的和大于n−−√n\sqrt n的两部分。 对于大于n−−√n\sqrt n的素数,一个数中最多只存在一个,所以我们可以把所有...原创 2018-06-25 19:42:51 · 186 阅读 · 0 评论 -
bzoj 2560: 串珠子 状压dp+容斥原理
题意给出一个大小为n的无向图,边有边权。定义一个子图的权值为所有边权的乘积,问所有使全部n个点连通的子图的权值和为多少。 n≤16n≤16n\le16分析设fsfsf_s表示使sss中的点连通且不管其余点的所有子图的权值和为多少,gsgsg_s表示只看集合sss中的点,所有子图的权值和是多少。 显然gsgsg_s可以预处理,考虑如何求fsfsf_s。 直接求显然不好求,考虑用...原创 2018-05-14 16:44:08 · 831 阅读 · 0 评论 -
uoj 348&LibreOJ 2340 [WC2018]州区划分 状压dp+FMT
题意给出一个n个点m条边的无向图,要求把点集分成若干个集合,满足每个集合非空且其导出子图中不存在欧拉回路。 给定一个数组wiwiw_i,求对于所有合法的划分{S1,S2..Sk}{S1,S2..Sk}\{S_1,S_2..S_k\},下面式子之和:(∏i=1k∑x∈Siwx∑ij=1∑x∈Sjwx)p(∏i=1k∑x∈Siwx∑j=1i∑x∈Sjwx)p(\prod_{i=1}^k\frac...原创 2018-03-27 07:30:43 · 382 阅读 · 0 评论 -
bzoj 5248: [2018多省省队联测]一双木棋 博弈论+状压dp
题意菲菲和牛牛在一块n行m列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手。棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束。落子的规则是:一个格子可以落子当且仅当这个格子内没有棋子且这个格子的左侧及上方的所有格子内都有棋子。棋盘的每个格子上,都写有两个非负整数,从上到下第i行中从左到右第j列的格子上的两个整数记作Aij、Bij。在游戏结束后,菲菲和牛牛会分别计算自己的得...原创 2018-04-07 21:42:58 · 382 阅读 · 0 评论 -
AtCoder Petrozavodsk Contest 001 F - XOR Tree 状压dp
题意给出一棵树,边有边权,每次操作可以将一条链上的所有边异或上一个相同的数。问最少多少次操作后每条边的边权都变为0。 n<=100000,边权<=15分析我们可以把一个点的点权设为所有与它相连的边的权值异或和。 那么所有点的点权为0和所有边的边权为0互为充要条件,这样每次操作就变成了修改两个点的点权。 状压dp一下即可。代码#include<...原创 2018-03-13 16:28:18 · 303 阅读 · 0 评论 -
bzoj 3591: 最长上升子序列 状压dp
题意给出1~n的一个排列的一个最长上升子序列,求原排列可能的种类数。 1<-n<=15分析在O(nlogn)求最长上升序列的时候,需要处理一个g[i]表示长度为i的上升序列结尾最小的元素是哪个。 不难发现g[i]其实是单调递增的,那么就可以考虑状压每一个g[i]。 设一个三进制状态s表示每一位是否被选和是否属于某一个g[i],每次做O(n)的转移,这样总复杂度就是...原创 2018-03-18 18:58:48 · 858 阅读 · 1 评论 -
AtCoder Regular Contest 078 F - Mole and Abandoned Mine 状压dp
题意给出一个无向连通图,每条边都有一个删掉的代价。问最少花费多少代价来删边使得1到n恰好只存在一条简单路径。 n<=15分析正着搞不好搞,我们考虑最多能加多少边。 我的做法是状压出每一条路径,发现要想只存在一条简单路径的话,该路径上任意两个点都不能在同一个点双连通分量内。那么我们每次就可以给某个点连上一个连通块。然后就每次枚举哪一个连通快接到哪一个点上,这样的话复杂度会多...原创 2018-02-20 16:58:39 · 311 阅读 · 0 评论 -
bzoj 3195: [Jxoi2012]奇怪的道路 状压dp
题意小宇从历史书上了解到一个古老的文明。这个文明在各个方面高度发达,交通方面也不例外。考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n。m条道路连接在这些城市之间,每条道路将两个城市连接起来,使得两地的居民可以方便地来往。一对城市之间可能存在多条道路。 据史料记载,这个文明的交通网络满足两个奇怪的特征。首先,这个文明崇拜数字K,所以对于任何一条道路,设它连接的两个城市分别为u和v,则原创 2017-05-28 16:30:44 · 726 阅读 · 0 评论 -
bzoj 4006: [JLOI2015]管道连接 斯坦纳树
题意该部门有 n 个情报站,用 1 到 n 的整数编号。给出 m 对情报站 ui;vi 和费用 wi,表示情 报站 ui 和 vi 之间可以花费 wi 单位资源建立通道。 如果一个情报站经过若干个建立好的通道可以到达另外一个情报站,那么这两个情报站就 建立了通道连接。形式化地,若 ui 和 vi 建立了通道,那么它们建立了通道连接;若 ui 和 vi 均 与 ti 建立了通道连接,那么 ui原创 2017-04-18 14:43:44 · 503 阅读 · 0 评论 -
bzoj 1559: [JSOI2009]密码 AC自动机+状压dp
题意给出n个字符串,求有多少个长度为L的字符串满足每个字符串出现至少一次。字符串仅由小写字母组成。 若方案书<=42的输出方案。 n<=10,L<=25,字符串长度<=10分析首先把重复和被包含的字符串去掉,建立AC自动机。 设f[i,j,k]表示在AC自动机上走了i步,走到第j个点,n个字符串的出现情况为k(k为n位二进制)的方案数。直接枚举转移即可。 输出方案数的话,注意到若字符串的某一原创 2017-07-11 16:14:49 · 846 阅读 · 2 评论 -
bzoj 4145: [AMPPZ2014]The Prices 状压dp
题意你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i][j], 求最小总费用。 1<=n<=100,1<=m<=16分析首先设状态f[i,s]表示到第i个商店,购买的状态为s时的最小花费。一开始想到枚举子集,但是会T。又想了一下,一开始想的是多设一维0/1表示是否在商店i买了物品,后来看了题解,发现有更好的办法。就是先让f[i,s]原创 2017-07-20 13:56:59 · 276 阅读 · 0 评论