状压DP初探·总结
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初探·总结的更多相关文章
- 状压dp初探
写了几道状压...然后就一直在颓废... 2064: 分裂 http://www.lydsy.com/JudgeOnline/problem.php?id=2064 初始的为正,最后的为负,假设我们能 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
随机推荐
- java 数组声明定义 数组内存分配 数组初始化 数组引用 数组的遍历
一,数组的定义 Java 中定义数组的语法有两种: 1. type arrayName[]; 2. type[] arrayName;type 为Java中的任意数据类型,包括基本类型和组合类型,ar ...
- C# Winfrom 进程&多线程
进程: 首先需要引用命名空间: using systemDiagnostics; 最简单的打开进程的方法,进程名并不是汉字: Process.start("calc");//cla ...
- 解决win10环境下python Selenuim调用Chrome时提示data 及Chrome正在受自动软件控制的方法
用python自动访问谷歌浏览器时会出现data界面,很是烦人.在网上搜索,有说是因为webdriver和google版本不匹配导致的,就下过各种版本,结果都一样. 后来明白了,出现data的原因只是 ...
- 基本数据类型补充,深浅copy
#str s=' ' #只能是以至少一个空格组成的字符串(全空格) print(s.isspace()) #tuple 当元组只有一个元素组成,并没有",",则该元素是什么数据类型 ...
- app软件遵循的规范
http://www.jianshu.com/p/a2a4c18c1900 https://wenku.baidu.com/view/ecb09b07a4e9856a561252d380eb6294d ...
- 大型游戏案例UI开发总结_1
Canvas(画布)中选择Render Mode----Screen Space Camera,为了在摄像机和UI画布之间放置3D物体. Camera中的Projection选择Orthographi ...
- grub.conf解析
一.grub简介系统启动引导管理器,是在计算机启动后运行的第一个程序,他是用来负责加载.传输控制到操作系统的内核,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化 ...
- Linux下FTP虚拟账号环境部署简述
vsftp的用户有三种类型:匿名用户.系统用户.虚拟用户.1)匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous.2)本地用户登录:使用系统用户登录,在/etc/passwd中 ...
- spring 整合 redis,以及spring的RedisTemplate如何使用
需要的jar包 spring-data-redis-1.6.2.RELEASE.jar jedis-2.7.2.jar(依赖 commons-pool2-2.3.jar) commons-pool2- ...
- Django REST Framework限速
官方文档:http://www.django-rest-framework.org/api-guide/throttling/#throttling settings.py配置 REST_FRAMEW ...