博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[算法模板]SOS DP
阅读量:5263 次
发布时间:2019-06-14

本文共 540 字,大约阅读时间需要 1 分钟。

[算法模板]SOS DP

正文

SOS-DP(\(\text{Sum over Subsets}\))是用来解决这样的问题的:

1669439-20190917151215910-692961519.png

其实就是子集和DP。上面每个\(F[mask]\)里面包含了\(mask\)所有二进制子集的信息。这是一种\(n\log_2 n\)的DP方法。

我们定义一个DP状态\(S(mask,i)\)代表\(mask\)子集中只有最靠右的\(i\)位与其不同的状态。

具体是这样的:

1669439-20190917151222102-1584761599.png

图中描述了\(S(10110,4)\)这个状态和其所有儿子之间的关系。

形象一些解释就是每次我们求解一个状态时,我们只从他的所有子集里和他只差一位的状态转移过来。(众所周知,如果\(A\subseteq B,B\subseteq C\)那么\(A\subseteq\) C)。

放一段代码:

for(int i = 0; i<(1<
< N; ++i) for(int mask = 0; mask < (1<

所以显然,复杂度\(N\space 2^N\)。如果令值域为\(M\),那么复杂度就是\(M\log_2M\)

例题

参考资料

1669439-20190917151254012-609284456.jpg

转载于:https://www.cnblogs.com/GavinZheng/p/11533990.html

你可能感兴趣的文章
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
latex tree
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
css3学习01
查看>>
【USACO】 奶牛会展
查看>>
ActiveMQ笔记之点对点队列(Point-to-Point)
查看>>
继承和多态
查看>>
Dijkstra+计算几何 POJ 2502 Subway
查看>>
修复IE不能执行JS的方法
查看>>
程序员究竟该如何提高效率zt
查看>>
希尔排序法(缩小增量法)
查看>>