当前位置:网站首页>【学习笔记】状压dp
【学习笔记】状压dp
2022-08-04 06:03:00 【仰望星空的蚂蚁】
Rotate Columns
状压好题!!
设 d p [ i ] [ S ] dp[i][S] dp[i][S]表示考虑前 i i i列, S [ j ] = 1 S[j]=1 S[j]=1表示已经钦定了第 j j j行的最大值,已经钦定的最大值之和最大
复杂度 O ( n m 3 n ) O(nm3^n) O(nm3n)显然 t l e tle tle飞了。
那么按每一列的最大值排序,注意到只有前 n n n列会对答案产生贡献。
于是优化到 O ( n 2 3 n ) O(n^23^n) O(n23n) 。
但是枚举子集太慢了。考虑对于一种循环,往集合里面一个一个塞数,用临时数组存一下然后贡献到答案里。
复杂度 O ( n 3 2 n ) O(n^32^n) O(n32n)。可以通过。
tips:小心数据范围诈骗。
Bits And Pieces
仔细想一下发现是套路题
从高到低位处理答案,预处理一下 S S S超集的最大,次大位置即可
复杂度 O ( ( n + a ) log a ) O((n+a)\log a) O((n+a)loga)
Sandy and Nuts
烦死了烦死了
设 d p [ S ] [ u ] dp[S][u] dp[S][u]表示以 u u u为根的方案数, S S S是一个二进制状态
转移为 d p [ S ] [ u ] = ∑ d p [ S ⊕ S 2 ] [ u ] × d p [ S 2 ] [ v ] dp[S][u]=\sum dp[S\oplus S2][u]\times dp[S2][v] dp[S][u]=∑dp[S⊕S2][u]×dp[S2][v]
为了避免算重我们强制 S 2 S2 S2包含特殊点 p p p时才能转移
考虑限制条件。事实上我们只关心 L C A LCA LCA在子树内以及边在子树内的情况。
对于 L C A LCA LCA:
1.1 1.1 1.1对于限制 ( a , b , c ) (a,b,c) (a,b,c),如果 c = u c=u c=u,但是 a , b ∈ S 2 a,b\in S2 a,b∈S2 那么 L C A ( a , b ) ≠ c LCA(a,b)\ne c LCA(a,b)=c
1.2 1.2 1.2对于限制 ( a , b , c ) (a,b,c) (a,b,c),如果 c ∈ S 2 c\in S2 c∈S2,但是 a ∉ S 2 a\notin S2 a∈/S2或者 b ∉ S 2 b\notin S2 b∈/S2那么 L C A ( a , b ) ≠ c LCA(a,b)\ne c LCA(a,b)=c
对于边:
1.1 1.1 1.1对于边 ( x , y ) (x,y) (x,y),如果 x ∈ S 2 x\in S2 x∈S2并且 y ∈ S − u y\in S-u y∈S−u或者反之,那么 ( x , y ) (x,y) (x,y)不可能在树上
1.2 1.2 1.2如果 u u u与 i i i有边并且 i ∈ S 2 i\in S2 i∈S2的 i i i的个数 ≥ 2 \ge 2 ≥2,那么不可能有满足条件的树
事实上如果满足条件的 i i i的个数等于 1 1 1,那么转移时 S 2 S2 S2的根可以直接求出
复杂度 O ( n q 3 n ) O(nq3^n) O(nq3n)。
事实上可以对 L C A LCA LCA预处理,复杂度 O ( n 3 n + 2 n q ) O(n3^n+2^nq) O(n3n+2nq)。
Yet Another DAG Problem
我是傻逼
key observation : \text{key observation}: key observation:每个点权值为 [ 0 , n − 1 ] [0,n-1] [0,n−1]
把拓扑序拉出来,然后不断对一段后缀 − 1 -1 −1直到不能减为止,然后把后缀最小的那个提到前面来,不难证明每次提到前面来的值小于 n n n。
然后枚举子集把一个集合的点全部设为某一权值来转移,复杂度 O ( n 3 n ) O(n3^n) O(n3n)显然 t l e tle tle飞了。
如果当前点在第 j j j轮加进去的话贡献是 j × v [ i ] j\times v[i] j×v[i]
那么我们将贡献提前计算,复杂度 O ( 3 n ) O(3^n) O(3n)。
Circling Round Treasures
我是傻逼
对于炸弹可以看成价值为无穷小的宝藏。
对于每个宝藏引一条射线,如果和封闭路径边界有奇数个交点就证明在封闭路径围成的内部。
考虑状压记录每个宝藏交点个数的奇偶性,以及当前所处的位置,然后跑最短路即可。
然后射线和线段求交点那个地方比较复杂。射线的斜率取一个比较大的随机数,这样就不会穿过整点了。
Wise Men
边栏推荐
猜你喜欢
打破千篇一律,DIY属于自己独一无二的商城
MATLAB版量化交易技术分析工具TA-Lib【不付费也可获取,不要被付费吓跑】
有趣的USB接口和颜色分类
MySQL内存淘汰策略
VMD结合ISSA优化LSSVM功率预测
【愚公系列】2022年07月 Go教学课程 027-深拷贝和浅拷贝
Hardware Knowledge: Introduction to RTMP and RTSP Traditional Streaming Protocols
基于EEMD+GRU+MLR的时间序列预测
Database document generation tool V1.0
HbuilderX 启动微信小程序 无法打开项目
随机推荐
如何画好业务架构图。
nacos 返回 403 unknown user 太他么坑了 源码解析
VMD combined with ISSA to optimize LSSVM power prediction
带你了解一下PHP搭建的电商商城系统
IDEA中创建编写JSP
HbuilderX 启动微信小程序 无法打开项目
如何用matlab做高精度计算?【第二辑】
字符串的一些方法
Base64编码原理
unity webgl报 Uncaught SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON
科研绘图图表类型种类繁多,本文告诉你如何选择!
C语言实现-华为太空人手表
MySQL复制表结构、表数据的方法
unicloud 腾讯云 上传文件 Have no access right to the storage uniapp
fanuc机器人IO分配报警信号分配无效
A semi-supervised Laplace skyhawk optimization depth nuclear extreme learning machine for classification
基于子空间结构保持的迁移学习方法MLSSM
mysql基础(4)
从零开始单相在线式不间断电源(UPS)(硬件)
Unable to preventDefault inside passive event listener due to target being treated as passive. See