
状压DP
文章平均质量分 78
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【校内模拟】Fygon 2.0(状压DP)
原题传送门目前计蒜客上面AC数量还是0,我也懒得交,估计CF Gym里面也该有这道,懒得找了。题解:今天的签到题。把for循环换个思路考虑: for var in range ( l , r ):冷静一想不难发现等价于: for var in range ( 1 , n ): if(l <= var && var <= r)于是实际上要求的就是...原创 2020-04-20 15:14:11 · 461 阅读 · 0 评论 -
【校内模拟】排列(状压DP)(矩阵快速幂)
简要题意:统计有多少个不同的 nnn 排列满足 ∣pi−i∣≤k|p_i-i|\leq k∣pi−i∣≤kk≤4k\leq 4k≤4题解:容易发现当前位置选择哪一个只会影响到后面 kkk 个位置。kkk 本身非常小,状压即可。容易发现转移和当前是第几位无关,只和状态有关,而且是线性,写成矩阵然后快速幂即可。代码:#include<bits/stdc++.h>#de...原创 2020-02-21 21:38:06 · 272 阅读 · 1 评论 -
【校内模拟】ふでペン ~ボールペン~/毛笔与圆珠笔(状压DP)(矩阵快速幂)(BM算法)(多项式取模优化线性递推)
简要题意:对称不算同构,一共有 777 种四骨牌(玩过Tetris吗?)。现在给你一个 4∗n4*n4∗n 的矩形,你需要用四骨牌不重不漏地覆盖每个格子,问有多少种方案?对一个众所周知的模数取模。题解:其实应该猜想得到这种东西肯定是矩阵快速幂,既然是矩阵快速幂了,那就肯定有线性递推式。不知道有没有人和我一样无所畏惧尝试手推线性递推式存在线性递推式的临界其实就是指数增长到多项式增长。然...原创 2019-11-06 21:48:38 · 313 阅读 · 2 评论 -
【校内模拟】奇异序列(状压)(不过其实有很奇怪的做法)
题解:不是很懂这类题有什么意思。可以争着做也可以反着做,反着做状态要少一点,常数小一点。尝试状压DP,发现复杂度是O(nk2k)O(nk2^k)O(nk2k),感觉很方,测了一下极限数据,发现非0状态只有700070007000多个,于是只存有用状态即可。nnn甚至可以开到500500500。如果kkk再小一点,有效状态更少,可以上矩阵快速幂,nnn甚至可以开1e91e91e9直接用转移...原创 2019-11-01 16:58:01 · 232 阅读 · 0 评论 -
2019.03.26【BZOJ4774】修路(斯坦纳树)(状压DP)
传送门解析:连通关键点的最小斯坦纳树森林。感觉这类题目还是挺版的,可以先做一下这道题,其实是一个套路代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inline char get_...原创 2019-03-26 13:39:45 · 170 阅读 · 0 评论 -
【SNOI2017】【洛谷P5366】【BZOJ5019】【LOJ2257】遗失的答案(数论基础)(状压DP)(FMT)
LOJ传送门题解:(超大常数在线丢人)其实可以不用脑子先把非法判掉。那么实际上我们就是要求选择若干个数,其中存在指数达到gcdgcdgcd的下界,且存在指数达到lcmlcmlcm的上界。发现是个带位或转移的DP。FMT算出DP的前后缀就能支持强制令某个数出现,随便水了。代码:#include<bits/stdc++.h>#define ll long long#...原创 2019-08-08 20:24:34 · 426 阅读 · 0 评论 -
【WC2018】【洛谷P4221】【UOJ#348】州区划分(占位幂级数)(FMT)(状压DP)
洛谷传送门UOJ传送门题解:首先我们假设没有点集必须合法的限制,可以得到一个很显然的状压DP的思路。设g[S]=(∑v∈Sw[v])pg[S]=(\sum_{v\in S}w[v])^pg[S]=(∑v∈Sw[v])p,则f[S]=∑T⊂Sf[T]g[S/T]g[S]f[S]=\frac{\sum_{T\subset S }f[T]g[S/T]}{g[S]}f[S]=g[S]∑T⊂...原创 2019-08-06 20:40:00 · 189 阅读 · 0 评论 -
【校内模拟】树(树哈希)(状压DP)
题解:和ZJOI2018线图里面的处理方式一样。找到重心,以重心为根。然后对于每一个子树哈希一下。接下来就很简单了,我们直接枚举A树里面的每一个点和B树的根匹配,然后状压DP算一下孩子的匹配方案数。复杂度有一个显然的上界是O(nm32m2)O(nm^32^{\frac{m}{2}})O(nm322m),但是里面有两个mmm和2m22^{\frac{m}{2}}22m是远远到不了的,目前...原创 2019-08-29 20:10:49 · 187 阅读 · 0 评论 -
【JSOI2009】密码(AC自动机)(KMP)(状压DP)(爆搜)
传送门下面的代码用了少量std::string的成员函数来完成部分骚操作,如果看不懂请自行百度。题解:这个数据范围和询问的问题就很状压。直接建立AC自动机之后状压DP就可以算出方案数。然后你发现,这是一个计数类问题,不是最优化,却要求输出方案,也就是说我们不太好记录DP的转移方向。先骂一句MMP但是只会在方案数小于等于424242的时候要求输出。然后你发现直接在AC自动机上爆搜复...原创 2019-09-23 11:58:13 · 259 阅读 · 0 评论 -
【校内模拟】记忆(状压DP)
题解:考场想到了正解,然后被卡高速缓存,gg一个显然的转化就是设eie_iei表示朋友选择第iii个串的时候的期望操作次数。首先考虑一个O(nl2l)O(nl2^l)O(nl2l)的暴力,对于每个串,枚举所有其他串看有多少个位置相同,则我们能够代码:#include<bits/stdc++.h>#define ll long long#define re regist...原创 2019-10-01 15:10:58 · 183 阅读 · 0 评论 -
【THUWC2017】随机二分图(状压)(容斥)(记忆化搜索)
传送门题解:首先算期望就是对于每一种完美匹配算出现概率然后求个和。如果只有第000类边的话我们可以考虑如下的DP,把现在左侧还没有匹配的点压起来,右侧还没有匹配的点压起来,用一个int表示状态。那么显然我们需要知道的就是这些点自己期望能够产生多少种合法匹配使得自己匹配完。由于边是无序的,转移的时候直接强行枚举一边把集合中编号最小的点搞掉即可。考虑111类边组和222类边组。这两类的...原创 2019-10-08 17:38:48 · 150 阅读 · 0 评论 -
2019.03.26【JLOI2015】【洛谷P3264】【BZOJ4006】【LOJ2110】管道连接(斯坦纳树)(状压DP)
洛谷传送门BZOJ传送门LOJ传送门解析:很显然,由于求的是令某些特殊点连接起来的最小代价,所以解应该是斯坦纳森林。先求出所有状态的斯坦纳树,然后枚举集合的划分,check一下同一频道的点是否全在或全不在当前状态中,之后直接转移就好了。代码:#include<bits/stdc++.h>#define ll long long#define re register...原创 2019-03-26 11:44:19 · 204 阅读 · 0 评论 -
2019.02.26【九省联考2018】【BZOJ5248】【洛谷P4363】双木棋(状压DP)(记忆化搜索)
BZOJ传送门洛谷传送门解析:我们发现当前可决策格子是有限的,实际上,总的状态数非常少,只有9e4种左右,所以我们可以用一个longlong来压一下每一列当前已经决策了多少个格子,然后用哈希表记忆化搜索一下就行了。代码:#include&lt;bits/stdc++.h&gt;using namespace std;#define ll long long#define re ...原创 2019-02-26 16:12:12 · 174 阅读 · 0 评论 -
2019.02.22【TJOI2018】【BZOJ5336】【洛谷P4590】游园会 party(自行构建自动机)(状压DP)
BZOJ传送门洛谷传送门解析:首先对串NOI建立AC自动机(Trie图),为了排除所有匹配上的情况。显然这个Trie图只有九种转移,三个节点,直接手打就行了,int tr1[3][3]={ {1,0,0}, {1,2,0}, {1,0,3}};3状态就是匹配上的终态,非法。维护一维记录当前在这个自动机上匹配到哪个节点了。然后考虑这个鬼畜的东西:LCSLCSLCS。注意这...原创 2019-02-22 13:49:41 · 274 阅读 · 0 评论 -
2018.09.27【BZOJ1076】【洛谷P4273】【SCOI2008】奖励关(状压DP)(期望DP)
BZOJ传送门洛谷传送门解析:一眼看题面就是期望DP,再看数据范围就知道是状态压缩思路:一般来说是期望倒着推,概率顺着推,少数情况可以不遵守以上规则。然而这个就显然不是少数情况,我们仍然选择倒推。我们考虑什么状态能够倒着转移回来。我们枚举下一轮丢出的宝物,看在这一次能否选择,然后再考虑是否要转移。代码:#include<bits/stdc++.h>using ...原创 2018-09-27 23:46:08 · 195 阅读 · 0 评论 -
2018.10.12【NOIP2017】【洛谷P3659】宝藏(状压DP)
传送门解析:看到数据范围只有121212,不会还有人以为这是一道最小生成树的魔改题吧。。。这道题与最小生成树似乎什么关系都没有。。。(虽然听说最小生成树可以骗到45分)思路:首先看到数据范围只有121212。。。可以,这很状压。那么我们显然状压的就是当前有哪些点已经选在了我们当前的生成树中,然而这里开始出现了难以理解的东西,我们只需要维护当前生成树的树高。我先给出状态转移方程,再...原创 2018-10-12 22:04:22 · 200 阅读 · 0 评论 -
2018.10.17【校内模拟】管道(状压DP)
传送门(内网)解析:简直有毒,出题人还一本正经的说:“我觉得没有去年NOIPD2T2NOIPD2T2NOIPD2T2难啊”我只想说,去年D2T2D2T2D2T2的转移方程那里有这么鬼畜。。。思路:首先利用两个数组f,dpf\text{,}dpf,dp来进行状态转移。定义如下fi,staf_{i,sta}fi,sta表示不经过回溯,当前点在iiicode(内网)...原创 2018-10-17 23:25:52 · 186 阅读 · 0 评论 -
2018.10.23【SCOI2007】【BZOJ1072】【洛谷P4163】排列(状压DP)
BZOJ传送门洛谷传送门解析:水题状压。显然我们可以枚举状态fsta,kf_{sta,k}fsta,k表示当前选择了stastasta中的数,%d\%d%d的结果是kkk的方案数。考虑怎么避免重复,首先用排列去重是可以的,但是这明明是一道水题,有什么必要去推式子呢?我们直接预处理出选择每一个数的前提状态,其实就是当序列中有多个iii的时候,保证选择第二个iii的时候第一个iii已经出...原创 2018-10-23 21:10:18 · 176 阅读 · 0 评论 -
2018.10.26【HAOI2016】【BZOJ4565】【洛谷P3736】字符合并(区间DP)(状压DP)
BZOJ传送门洛谷传送门解析:由于所有权值都是正数,所以显然最优情况一定是合并到某种不能够继续合并的情况。一看kkk只有8,可以,这很状压。那么考虑两种操作,区间合并和区间替换,其中区间合并就是把区间&amp;lt;i,mid−1&amp;gt;&amp;lt;i,mid-1&amp;gt;&lt;i,mid−1&gt;和&amp;lt;mid,j&amp;原创 2018-10-26 08:16:21 · 163 阅读 · 0 评论 -
2018.11.06【SCOI2005】【BZOJ1087】【洛谷P1896】互不侵犯(状压DP)
BZOJ传送门洛谷传送门解析:范围只有9,显然是状压DP。考虑处理出每个可能的状态来减小常数。然后枚举行,枚举当前行状态,枚举前一行状态,更新即可。注意要预处理第一行的情况。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define ...原创 2018-11-06 08:26:27 · 138 阅读 · 0 评论 -
2018.11.01【NOIP2016】【洛谷P2831】愤怒的小鸟(状压DP)
传送门解析:数据范围181818,多么显然的状压。。。但是!!!为什么O(n22n)O(n^22^n)O(n22n)能过???复杂度明显不对啊。。。这里提供一种O(n2n)O(n2^n)O(n2n)的做法(博主也是看了别人的题解学习的这种做法)思路:首先枚举所有合法的线(即枚举两只猪),预处理这条线能够穿过的猪。然后直接大力DPDPDP就是O(n22n)O(n^22^n)O(n22...原创 2018-11-02 20:25:11 · 143 阅读 · 0 评论 -
2018.01.02【CQOI2018】【BZOJ5299】【洛谷P4460】解锁屏幕(状压DP)(轻微卡常)
BZOJ传送门洛谷传送门解析:熟悉的感觉。。。洛谷RK1,BZOJ RK2,前面的又是工程大佬xehoth。。。思路:这道题真的卡常,本来说用BFS可以优化一些不可能达到的状态,从而减少计算量。。。我还是太naive了。。。结果复杂度算下来O(2n×n2)O(2^n\times n^2)O(2n×n2)。。。这个。。真的能过?于是BFS卡常也只卡出了80pts。。然后转手去写朴素...原创 2019-01-02 13:35:02 · 258 阅读 · 0 评论