状压DP
LowestJN
强省弱OIer
展开
-
[BZOJ2669][cqoi2012][状压DP][容斥原理]局部极小值
去年暑假就见过这道题,觉得太难就扔到一边,这几天上课讲到就填上这个坑考虑状压DP,因为普通DP出来的方案数中会存在局部最小值大于给定数量的情况,所以要dfs出所有情况然后容斥#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #define mod 123456原创 2017-02-21 20:53:32 · 623 阅读 · 0 评论 -
[状压DP || 容斥 矩阵树定理] Codeforces 53E. Dead Ends
容斥练习题这题状压DP的做法跟今年NOIP那题状压一样简单——vectorxj也可以容斥 枚举叶子的集合 SS,算出非叶子的点的导出子图的生成树个数,再乘上每个叶子和这些点的边的数量 这样可以算出 fif_i,至少有 ii 个叶子的方案数然后就跟一般容斥一样 gi=fi−∑j=i+1n(ji)gj g_i=f_i-\sum_{j=i+1}^n{j\choose i}g_j #include <原创 2018-01-04 11:52:50 · 548 阅读 · 0 评论 -
[容斥 & 状压DP & FFT] Tco 2016 Final. HamiltonianPaths
相当于是问有多少种排列,使得相邻的点之间没有边 考虑容斥 一张图中选了 dd 条边,那么会形成 n−dn-d 条链,设所有图中的链总共有 xx 条,那么答案乘上 x!x! 只要DP出形成 aa 条链的方案数,然后NTT一下就可以了// BEGIN CUT HERE // END CUT HERE #include <vector> #include <list> #include原创 2018-01-03 18:37:11 · 398 阅读 · 0 评论 -
[DP套DP 状压] HDU4899. Hero meet devil
学一发DP套DP#include <cstdio> #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N=1<<16|5,P=1e9+7;int T,n,m; char a[20],b[5]={'A','T','C','G'}; int f[2][N],g[N][5],w[原创 2017-12-27 14:10:42 · 596 阅读 · 0 评论 -
[容斥 状压DP] HDU4997. Biconnected
令 fSf_S 表示点集 SS 的答案,gSg_S 表示点集 SS 的连通图个数那么 gSg_S 可以通过枚举与编号最小的点联通的点集求出来fS=gS−∑T∈SgT×MT,S−Tf_S=g_S-\sum_{T\in S}g_T\times M_{T,S-T},MS,TM_{S,T} 表示把点集 SS 分成几个联通块后连到 TT 上的方案数#include <cstdio> #include <ios原创 2017-12-26 21:20:45 · 496 阅读 · 0 评论 -
[状压DP] TopCoderSRM549 DIV1 600. MagicalHats
对帽子状压,0表示没选过,1表示选过但是没有硬币,2表示选过且存在硬币。 可以先dp出每一种情况是否合法,然后dp显然只要DP出最多能得到几个硬币就好了(magician肯定会从小到大给你硬币) 对于状态S,枚举选择哪个帽子,magician会在“在这个帽子里放硬币”和“在这个帽子里不放硬币”选择较小的。记忆化搜索一下// BEGIN CUT HERE // END CUT HERE #l原创 2017-12-14 13:04:28 · 509 阅读 · 0 评论 -
[最小斯坦纳树] Baltic OI 2016. Cities
应该最小斯坦纳树裸题吧…加个spfa的那个优化就可以了#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <queue>using namespace std;typedef long long ll;const int N=100010;int n,k,m,cnt,G[N];原创 2017-10-28 21:05:37 · 844 阅读 · 0 评论 -
[LOJ#2290][THUWC 2017][概率][状压][DP][陈老师神题]随机二分图
又是一个冬令营未填的坑可以根据期望的直接定义,求出每个完美匹配出现的概率。 因为n很小,可以状压DP,fs,tf_{s,t}表示左边被匹配的状态为ss,右边被匹配的状态为tt时的概率,因为左右边被匹配的点个数是相同的,所以状态数大概为∑Cin2\sum {C^i_n}^2???但是肯定远远比这个小。然后直接做不太容易实现 可以把两条边的组拆分。 同时出现的组 可以拆成两条50%的边,以及25%原创 2017-07-04 17:39:00 · 1631 阅读 · 0 评论 -
[BZOJ3925]地震后的幻想乡 期望 状压DP
不想写题意了……不错的题解网上一些大神好像用积分什么的来解……表示蒟蒻看不懂。 上面的题解是用期望的线性性质,要好懂些,不过比较抽象。一下是我对最后求答案公式的理解,大神可以跳过……因为有m条边,可以想象一张有m个点的图,节点按编号依次相连(即0连1,1连2......m-1连m),且每个点都跟终点相连。 从0号点开始移动,第i个点有f(i)的概率移动到下一个节点,1-f(i)的概率移动到终点,问原创 2017-01-25 13:20:21 · 692 阅读 · 0 评论 -
[容斥 状压DP] Atcoder ARC093 F - Dark Horse
wwwww比赛的时候题目看错了 假设我们确定的1的位置,那么接下来的每一轮,1都会和一段长度为2的幂的区间里,标号最小的人pk。 把1固定在1位置(求出最终方案数后乘上 2n2n2^n 就是答案),那么就相当于区间 [2,2][2,2][2,2],[3,4][3,4][3,4],[5,8][5,8][5,8]…[2n−1+1,2n][2n−1+1,2n][2^{n-1}+1,2^n] 里的最小...原创 2018-03-26 08:32:51 · 746 阅读 · 0 评论