随笔分类 - 思想——状态压缩(状压DP/轮廓线DP/DP套DP)
摘要:IV.UOJ#422. 【集训队作业2018】小Z的礼物 考虑直接上minmax容斥。然后,考虑DP求出对于所有的 \(\Big(|\mathbb T|,\min(\mathbb T)\Big)\) 二元组,满足其的 \(\mathbb T\) 个数。又因为 \(n\) 很小,我们尝试轮廓线DP。故
阅读全文
摘要:如果有线性代数基础的话会更易理解。推荐配合本人的线性代数学习笔记食用。 线性基是针对某个序列生成的一个集合,它具有以下两条性质: 线性基中任意选择一些数的异或值所构成的集合,等于原序列中任意选择一些数的异或值所构成的集合。 线性基是满足上述条件的最小集合。 有了上面这两条性质,我们便可以得出如下几条
阅读全文
摘要:VII.软件补丁问题 这题一眼看到那恶心的限制觉得是状压,一看那$n=20$的范围更觉得是状压,想了网络流$3 min$没想出来,看了标签发现里面居然只有状压一个QaQ!!! 因此便用Dijkstra维护状压进行转移就水过去了QaQ。 鬼知道为什么一道状压会出现在网络流24题里面啊QaQ! 代码:
阅读全文
摘要:IX.[CERC2016]二分毯 Bipartite Blanket 二分图的重要定理:霍尔定理(Hall's Theroem)的应用。 霍尔定理:二分图 \(V=\Big((S,T),E\Big)\) 存在完美匹配,当且仅当 \(\forall s\subseteq S,|s|\leq |E_s|
阅读全文
摘要:这里是集合幂级数学习笔记。 本博客在半年前就已经有计划去写了,只不过当时题目较少没能如愿。现在攒了几道题,开始动笔。 O.定义 定义 \mathsf 字体的函数为集合幂级数。例:\(\mathsf F(x),\mathsf G(x)\)。 定义 \mathbb 字体的变量表示集合。例:\(\math
阅读全文
摘要:CLVII.[LOJ#2372]「CEOI2002」臭虫集成电路公司 考虑轮廓线DP。因为有 \(3\times2\) 的矩形存在,所以要压两行。又因为两行的状态只有可能是 00,01,10 之一,所以压三进制。又因为卡空间,所以要滚动数组。时间复杂度 \(O(nm3^m)\)。 代码: #incl
阅读全文
摘要:CXLII.CF1158F Density of subarrays 题解
阅读全文
摘要:CXXXV.[ZOJ3989]Triangulation 神题。 这个数据范围很难不让人想到状压DP。于是我们考虑应该怎么设计状态。 考虑一组三角剖分的形态:其必定是在所有点所构成的凸包内部划分出很多三角形。这也就表明,任何一组三角剖分一定包含所有凸包上的边。 我们可以想到一个比较简洁的DP:设 \
阅读全文
摘要:CXXXIV.[BZOJ3864]Hero meet devil 我们不妨从最trival的LCS问题上想起:暴力的LCS求法是什么? 设 \(f(i,j)\) 表示一个串(不妨设为本题中要填的字符串 \(T\))的前 \(i\) 位与另一个串(即题目中给出的 \(S\))的前 \(j\) 位所构成
阅读全文
摘要:CXXXIII.[HDU6094]Rikka with K-Match 依旧wqs二分。 首先,依据我们之前提到过的一个性质,“凡是可以表示成费用流模型的东西都有凹凸性”,本题也不例外,关于匹配个数的函数是凹的。 凹的就可以wqs二分。于是问题转换为最小权任意匹配。因为 \(m\) 只有 \(4\)
阅读全文
摘要:CXXVI.[GYM102832J]Abstract Painting 考虑将一个圆心为 \((x,0)\),半径为 \(R\) 的圆,转换为 \(x\) 轴上线段 \([x-R,x+R]\),问题转换为求无交的线段覆盖方案数。 因为所有的圆半径很小(\(5\)),所以我们考虑状压位置 \(i\)
阅读全文
摘要:CXVII.[清华集训2012]串珠子 如果直接暴力上状压进行计数是会重复计算的;那么怎样不重不漏地计数呢? 我们发现,要求出连通图的数量是比较难的;但是要求出非联通图的数量是比较简单的,因为我们可以祭出套路。 我们设 \(f_i\) 表示 \(i\) 集合中所有图的数量(不管联通与否)。再设 \(
阅读全文
摘要:CXI.[九省联考2018]一双木棋chess 一下子就想到了LXX.[USACO5.5]贰五语言Two Five(可见刷题笔记II),因为同是阶梯型的图样。然后稍微想一想就发现总方案数可以用隔板法证得是$\dbinom{n+m}$的,代入一看发现才$2\times10^5$都不到。于是就果断DP了
阅读全文
摘要:IC.[POI2007]ATR-Tourist Attractions 这题我一年半之前初学状压DP时就写了份没卡空间的做法,今天终于A了…… 首先,思路非常简单——我们可以使用Dijkstra预处理出来$2\sim k+1$中两两点之间的距离以及它们到$1$和$n$的距离。接着,设$f[i,j]$
阅读全文
摘要:XXXV.CF401D Roman and Numbers 思路: 我们设$num_i$表示$n$中出现了多少个数字$i$。然后就可以设$f[i][j]$表示当填入数字的状态是$i$,且当前数$%m$的余数是$j$时的方案数。则直接转移即可。 复杂度$O(18*2^{18}*m)$。 代码: #in
阅读全文
摘要:LXVII.[USACO15JAN]Moovie Mooving G 思路1. 设$f[i][S]$表示在第$i$场(注意是场,不是部)电影时,已经看了$S$里面的电影是否合法。 然后贪心地取$|S|$最小的状态保存。光荣MLE了,\(21\%\)。 代码: #include<bits/stdc++
阅读全文
摘要:XLVIII.CF11D A Simple Task 我感觉状压DP是所有DP中最能玩出花的那一种……因为状态保存下来了因此什么奇奇怪怪的限制都能满足。 比如说这题。 一个环可以看作一条首尾相接的路径。我们可以设$f[S][j]$表示:在集合$S$中的点构成了一条路径,且路径的起点为$j$的方案数。
阅读全文
摘要:XLVII.CF906C Party DP是门艺术。 $n\leq 22$一眼状压。但是怎么状压就比较困难,因为同一个$f[x]$可以代表成千上万种含义。 这里我们采用,设$f[x]$表示当$x$集合中所有的点都处于同一个团内的最小代价。 则我们有$f[x \operatornamesta_i]=\
阅读全文

浙公网安备 33010602011771号