集合划分状压dp】的更多相关文章

给一个 $n$ 个点 $m$ 条边的无向图,每条边有 $p_i$ 的概率消失,求图连通的概率 $n \leq 9$ sol: 我们考虑一个 $dp$ $f_{(i,S)}$ 表示只考虑前 $i$ 条边,当前图连通的状态为 $S$ 的概率 设这条边没有消失,图的新连通状态为 $T$ 那转移到 $T$ 的概率就是 $(1 - p_i)$ 不变的概率是 $p_i$ 然后一个滚动数组就做完了 然后我们考虑,怎么把“图的连通状态”这个东西状压出来 一个 idea 是,我们可以在状态里记录每个点所处的连通块…
大意: 给定$n$, 求集合{1,2,...n}的子集数, 满足若$x$在子集内, 则$2x,3x$不在子集内. 记$f(x)$为$x$除去所有因子2,3后的数, 那么对于所有$f$值相同的数可以划分为一个等价类, 对2的倍数和3的倍数建一个二维的表, 在表上做状压$dp$即可. 最后答案就为每个等价类方案的乘积. #include <iostream> #include <string.h> #define REP(i,a,n) for(int i=a;i<=n;++i)…
很裸的子集反演模板题,套上一些莫名其妙的外衣. 先预处理每个集合是否合法,再作显然的状压DP.然后发现可以写成子集反演的形式,直接套模板即可. 子集反演可以看这里. 子集反演的过程就是多设一维代表集合大小,再FMT处理集合并卷积. 然而我的FMT常数过大,而并卷积又可以用FWT实现,于是就写FWT了.(实际上就三行的区别) #include<cstdio> #include<algorithm> #include<cstring> #define rep(i,l,r)…
传送门 应该都会判欧拉回路吧(雾 考虑状压DP:设\(W_i\)表示集合\(i\)的点的权值和,\(route_i\)表示点集\(i\)的导出子图中是否存在欧拉回路,\(f_i\)表示前若干个城市包含了集合\(i\)的所有方案满意度的和,转移枚举最后一个放入的城市集合\(x\),有\(f_i = \frac{\sum\limits_{x \subset i} [route_x] W_x \times f_{i \oplus x}}{W_i}\). 可以注意到两个不交的状态\(i,j\)可以转移到…
题目:http://uoj.ac/problem/348 一开始可以 3^n 子集DP,枚举一种状态的最后一个集合是什么来转移: 设 \( f[s] \) 表示 \( s \) 集合内的点都划分好了,\( g[s] = \sum\limits_{i \in s} w[i] \) 那么 \( f[s] = \sum\limits_{d \subseteq s} \frac{f[s-d] * g[d]}{g[s]} \) 注意判断一个集合是否合法,不仅要判断每个点的度数,还要判断整个集合是否连通:…
题目大意 给定一个\(n\)个点的无向图,对于每种 \(n\) 个点的划分\(\{S_1,S_2,\ldots,S_k\}\),定义它是合法的,当且仅当每个点都在其中的一个集合中且对于任何的\(i\in[1,k]\),点集\(S_i\)非空,且导出子图不存在欧拉回路. 给定数组\(w_i\),求对于所有合法的划分\(\{s_1,s_2,\ldots,s_k\}\),下面的式子之和 \[ {(\prod_{i=1}^k\frac{\sum_{x\in S_i}w_x}{\sum_{j=1}^i\s…
合法条件为所有划分出的子图均不存在欧拉回路或不连通,也即至少存在一个度数为奇数的点或不连通.显然可以对每个点集预处理是否合法,然后就不用管这个奇怪的条件了. 考虑状压dp.设f[S]为S集合所有划分方案的满意度之和,枚举子集转移,则有f[S]=Σg[S']*f[S^S']*(sum[S']/sum[S])p (S'⊆S),其中g[S]为S集合是否合法,sum[S]为S集合人口数之和.复杂度O(3n).这个式子非常显然,就这么送了50分.p这么小显得非常奇怪但也没有任何卵用. 考虑优化.转移方程写…
BZOJ_2734_[HNOI2012]集合选数_构造+状压DP 题意:<集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中.同学们不喜欢这种具有枚举性 质的题目,于是把它变成了以下问题:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足上述约束条件的子集的个数(只需输出对 1,000,000,001 取模的结果),现在这个问题就 交给你了. 分析: 我…
题目要求若出现x,则不能出现2x,3x 所以我们考虑构造一个矩阵 \(1\ 2\ 4 \ 8--\) \(3\ 6\ 12\ 24--\) \(9\ 18\ 36--\) \(--\) 不难发现,对于一个矩阵,若我选择了一个数x,则在矩阵内该数的相邻格子都不能选,题目就被转化成了玉米田了,可以用状压DP解决 但是直接做是不对的,比如5就没有出现在这个序列中 所以我们可以构造多个矩阵,用乘法原理统计答案即可 #include<bits/stdc++.h> using namespace std;…
题目链接:https://cn.vjudge.net/contest/281960#problem/B 题目大意:中文题目 具体思路: 我们通过构造矩阵, x , 3x,9x,27x 2x,6x,18x,54x ............ 讲的很好的一篇博客:https://www.cnblogs.com/ljh2000-jump/p/6489018.html 可以看出,只要是选出的是相邻的,就一定是不满足的情况,所以说,我们可以通过构造矩阵将不满足的情况找出来,然后通过状压DP,通过不满足情况的…