状压dp
stargazer.
夜を穿つの
展开
-
【LOJ #6433】「PKUSC2018」最大前缀和(状压DP)
传送门 也挺傻逼的 nnn很小 考虑如果暴力计算每种前缀的集合为最大前缀和的答案 需要满足剩下的组成的任意前缀和都小于0 g[s]g[s]g[s]表示集合sss排列出来任意前缀和都小于0的方案数 类似考虑一个集合作为最大前缀和 把这个序列反过来 则一定不存在前缀和小于0 也可以类似的定义一个fff来做 注意最大前缀和不能不选,所以fff如果集合的和小于0也是合法的,只是不能继续转移 注意一段和为0...原创 2019-12-18 21:12:47 · 164 阅读 · 0 评论 -
【LOJ #2540】「PKUWC2018」随机算法(状压DP)
传送门 设f[i][s]f[i][s]f[i][s]为考虑排列里第iii个点,当前独立集为sss的方案数 暴力枚举下一个点转移即可 可以加入独立集的一定还没考虑过 复杂度O(n22n)O(n^22^n)O(n22n)但是转移次数很少 跑的飞快 #include<bits/stdc++.h> using namespace std; #define cs const #define re...原创 2019-11-07 22:08:50 · 164 阅读 · 0 评论 -
【LOJ #2290】「THUWC 2017」随机二分图(状压DP)
传送门 暴力的做法是设f[s1][s2]f[s1][s2]f[s1][s2]为左右匹配状态转移 考虑对于第二类 拆成两条独立的,出现概率为50%50\%50%的边 但是一起出现的概率少了25%25\%25% 可以再加一个一起出现的25%25\%25%的情况 第三类类似 加一个一起出现为−25%-25\%−25%的情况 然后暴力dpdpdp,用mapmapmap存状态 每次匹配标号最小的一个点 这样...原创 2019-11-07 22:05:44 · 169 阅读 · 0 评论 -
【LOJ #2136】「ZJOI2015」地震后的幻想乡(状压DP)
传送门 考虑对于一个边集∣S∣|S|∣S∣ 如果刚好加入第iii条边的时候联通 那么贡献就是∣S∣m+1∗P∣S∣\frac{|S|}{m+1}*P_{|S|}m+1∣S∣∗P∣S∣ P∣S∣P_{|S|}P∣S∣表示SSS中的边恰好是最小的∣S∣|S|∣S∣条的概率 设fs,if_{s,i}fs,i表示点集SSS联通,连了iii条边的方案数 ggg为不连通的方案数 那么有fs,i+gs...原创 2019-11-07 21:59:34 · 125 阅读 · 0 评论 -
【BZOJ5019】【SNOI2017】—遗失的答案(FMT+状压dp)
传送门 考虑说G,LG,LG,L相当于限制了一些质因子的出现次数有上下界 其实就相当于有pnump_{num}pnum个限制 我们要在GGG的因数里面选一些数出来满足限制的方案数 看一下每个因数满足哪些限制 然后就是一个状压dpdpdp了 考虑强制选xxx的 先把为000的判掉 然后就是前面和后面一段dpdpdp值 维护一个前后缀dpdpdp 做一个FMTFMTFMT再加上自己的状态就可以了 ...原创 2019-08-13 13:17:09 · 149 阅读 · 0 评论 -
【LOJ #2340】【WC 2018】—州区划分(子集卷积+状压dp)
传送门 令f(s)f(s)f(s)表示状态为sss的人口之和,g(s)g(s)g(s)为状态sss的所有州的划分的满意度之和 则 g(s)=∑i⊆sf(i)f(s)g(s⨁i)g(s)=\sum_{i\subseteq s}\frac{f(i)}{f(s)}g(s\bigoplus i)g(s)=∑i⊆sf(s)f(i)g(s⨁i)  ...原创 2019-08-08 08:52:28 · 190 阅读 · 0 评论 -
【BZOJ5248】【九省联考2018】—一双木棋(轮廓线dp)
传送门 轮廓线dp入门题 考虑我们用0/10/10/1串来表示一个已经选了的点和没选的点之间的轮廓 如果从左下到右上 比如向上为0,向右为1,那轮廓线就是一个01串 我们发现选了一个点实际上只是改变了轮廓方向的顺序 比如原来是...000111......000111......000111... 画图发现能填一个点当且仅当轮廓线为010101时 而且填完之后为101010 可以通过和3进行位运算...原创 2019-02-26 00:07:21 · 118 阅读 · 0 评论 -
【BZOJ1076】【SCOI2008】—奖励关(期望+状压dp)
传送门 考虑到当前选的物品会对后面决策产生影响,不好处理选还是不选,所以考虑从后往前递推 f[i][sta]f[i][sta]f[i][sta]表示第iii轮,已选的状态为stastasta时,后面最多可以得到的价值 然后就是简单题了 #include&lt;bits/stdc++.h&gt; using namespace std; #define ll long long #define re...原创 2019-02-16 20:38:38 · 140 阅读 · 0 评论 -
【BZOJ5299】【CQOI2018】解锁屏幕(状压dp)
传送门 状压dp简单题 f[t][i][sta]f[t][i][sta]f[t][i][sta]表示第ttt个点,当前是iii,走过的状态为stastasta时的方案数 可以先O(n3)O(n^3)O(n3)预处理每2个点之间要提前经过的状态 直接枚举转移就可以了 发现fff第一维不需要,就只用维护2维了 #include<bits/stdc++.h> using namespace ...原创 2019-02-22 16:56:43 · 119 阅读 · 0 评论