2018过农历新年这几天,学了一下状态压缩动态规划,现在先总结一下。

 

状态压缩其实是一种并没有改变dp本质的优化方法,阶段还是要照分,状态还是老样子,决策依旧要做,转移方程还是得列,最优还是最优,无后还是无后,所以它比较好理解。

 

状压,顾名思义就是要将一些状压想办法压缩起来(可以压,也可以删)。其中这些状态都满足相似性和数量很多。这样才好压而且压得有意义。常见于一般的方格题,网络题等等。

 

所以一般基础的状压就是将一行的状态压成一个数,这个数的二进制形式反映了这一行的情况。所以位运算可以帮助我们解决很多问题。我看了一篇讲义,感觉挺好的,就直接拿来用了,这里会介绍二进制的基本操作和一些常见用法。

 

这些操作都是在一个数转成二进制的情况下做的,包括按位与&、或|、取反~(注意负数补码的符号)、异或^(不同则真)、左移<<、右移>>。

 

下面是由江苏省淮阴中学薛志坚整理的一些常见操作:

 

接下来就是进行普通dp的操作。

 

不过这里要注意几点

 

初试化状态的时候要看清条件,什么要,什么不要。

 

一般情况下要预处理前k行(k由题目定)。

 

Dp时题目给的条件和fit函数、state数组都要检查。

 

最最重要的一点:位反(~ )  >  算术  >  位左移、位右移  >  关系运算

>  位与  >  位或  >  位异或  >  逻辑运算

所以一般位运算最好打括号。

 

 

讲讲不常规的状压dp。

 

我们要找一个方法将多余的状态给砍掉或者缩成一段。

 

 

 

上例题:

 

 

1、Corn Fields

 

最基础的状压dp,很多时候可以用来作为模板借鉴着做其他题目。

 

详情请看:这里

 

 

2、互不侵犯King

 

好像是优化搜索,其实还是dp,不过这里比t1的条件多了、难了,也比t1多限定了一个国王数量,所以要多存一个国王数量的状态,但是其实还是很基础。

 

详情请看:这里

 

 

3、炮兵阵地

 

这里从一个单行状态变成了双行状态,其他都很模板。

 

详情请看:这里

 

 

4、过河

 

这是第一道升级的状压,它终于不是普通01串的状态,而是将没用的状态给直接砍掉,再进行dp

 

详情请看:这里

 

 

5、强迫症的炸山

 

这是我同学(一位大佬)lxy出的题,这道看似很简短、很简单的题,做起来却不是那么容易。我甚至还没找到怎么正确地压缩状态。至今未果,以后会慢慢补充。毕竟现在打暴力得了tle,打正解(手动划去)得了re,我也很无奈。

 

 

状压dp其实不止这么简单,我这次学了只是皮毛中的皮毛,状压要捉住怎么压缩状态,加快程序运行,别的就和普通dp一样了。

 

请各位大佬指出错误或补充,谢谢。

 

嗯,就这样了。

状压DP初探·总结的更多相关文章

  1. 状压dp初探

    写了几道状压...然后就一直在颓废... 2064: 分裂 http://www.lydsy.com/JudgeOnline/problem.php?id=2064 初始的为正,最后的为负,假设我们能 ...

  2. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  3. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  4. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  5. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  6. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  7. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  8. HDU 1074 Doing Homework (状压dp)

    题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...

  9. 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP

    [BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...

随机推荐

  1. js 字符与ASCII码互转

    将字符转为ASCII码 var str = "A"; str.charCodeAt(); var str1 = 'a'; str1.charCodeAt(); 将ASCII码转为字 ...

  2. iview表单验证下拉框不通过问题

    iview表单验证的步骤: 第一步:给 Form 设置属性 rules :rules 第二步:同时给需要验证的每个 FormItem 设置属性 prop 指向对应字段即可 prop=”“ 第三步:注意 ...

  3. 洛谷P1173 [NOI2016]网格

    这个码量绝对是业界大毒瘤...... 300行,6.5k,烦的要死...... 题意:给你一个网格图,里面有0或1.你需要把一些0换成1使得存在某两个0不四联通.输出最小的换的数量.无解-1. n,m ...

  4. 【CH0103】最短哈密顿路径

    题目大意:给定一个 N 个点的无向图,点有点权,求从 0 号点走到 N-1 号点的最短哈密顿路径是多少. 题解:由于哈密顿路径的定义是每个顶点必须经过且仅能经过一次,因此,可用当前是否经过了这些点和当 ...

  5. session会话对象

    一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...

  6. hdu 3613"Best Reward"(Manacher算法)

    传送门 题意: 国王为了犒劳立下战功的大将军Li,决定奖给Li一串项链,这个项链一共包含26中珠子"a~z",每种珠子都有 相应的价值(-100~100),当某个项链可以构成回文时 ...

  7. centos7 mysql-server 安装过程

    官网下载安装mysql-server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -i ...

  8. ngnix FastCGI解析漏洞

    漏洞描述: Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME.当访问http://192.168.1.103/phpin ...

  9. keepalived+LVS实现网站负载均衡和HA

    如上图所示,102和103是内网nginx服务器,100和101是边界LB,clinet是1,这个实验是为了实现在LB上虚拟出一个VIP,client通过访问该VIP,来动态负载到两台内网nginx服 ...

  10. Luogu P3305 [SDOI2013]费用流 二分 网络流

    题目链接 \(Click\) \(Here\) 非常有趣的一个题目. 关键结论:所有的单位费用应该被分配在流量最大的边上. 即:在保证最大流的前提下,使最大流量最小.这里我们采用二分的方法,每次判断让 ...