状压dp其实和普通dp没有什么区别,主要差别在于要熟练掌握为运算的处理,我自己在这一方面比较菜, 所以特此总结一下,也方便自己以后查阅。

状压dp主要是将当前比较复杂的状压缩到二进制上表示,一般用于处理这样的问题:

在一个有n个不同元素的集合中,去表示我当前已经取得的元素状态;

比如如果 n = 3的话 , 0(000)表的是我手中什么都没有, 1(001)表示的是我当前取得了第一个元素, 2(010)表示的是我取得了第二个元素, 3(011)表示我当前已经有了第一个和第二个……。

总结: 先将各n个不同的初始化状态离散化标记,然后将我当前状态用二进制表示,如果i个状态我已经具有了, 那么这一位就是1,否则就是0,然后再转化成10进制表示。

那么如何进行状态的添加和减少呢?这就要用到位运算来解决了。

1、“<<”运算符: 1<<n 表示2 的n次方。如果一共有n种初始化状态(也就是集合中有n个元素),那么当下的任意一种状态都可以用一个小于(1<<n)的非负整数表示, 且(1<< (i-1)) 的值就是单独具有第i个状态的 十进制表示。

2、“&” 运算符: 可以表示两个集合的交集,也可用来快速确定当前状态中是否存在第i个状态。

比如 n = 4; 我当前的状态为11(1011)也就是我有了1,2,4这三个初始状态, 另外有一种状态是7(0111)有了1,2,3这三个初始状态, 那么两个集合的交集应该 是(0011)也就是3. 所以 7&11 == 3;

再比如: n = 4; 如果我当前状态为 11(1011), 对于11这个数来说如果不将其转化成二进制数的话,很难直观的确定其中是否存在某种状态,但是我们可以用&运 算符 来确定。 (11 & (1<<(i-1))) 如果这个值为0那么当前不存在第i个状态, 否则就存在。

3、"|" 运算符:表示两个集合的并集。可以用于给当前状态加上第i个状态。

比如: n = 4, 如果当前状态为 11(1011), 另一状态为7(0111), 7|11 =  15(1111), 如果想给7(1011) 加上的三种状态 可以用 7|(1<<(3-1)) = 15(1111). 更通常的写法 x|(1<<(i-1)) 表示如果当前状态为x那么加上第i个状态的值。(如果x已经具有了当前状态那么, x的值不变)。

4、“^”  运算符, x^y 会的如果 x, y 都具有或者都不具有第i个状态,那么的到的值就不会具有这种状态, 反正则具有这种状态。7^11 = (1100)12;

5、 “>>” 运算符: x>>1 表示x/2 也就是去除x中序号最大的那种状态。

以上是基本的符号,以及表示的意思。

状压dp解释及位运算相关介绍相关推荐

  1. 【CF1209E】Rotate Columns【状压DP】【位运算】【贪心】

    题意:给一个N×MN \times MN×M的矩阵,可以进行任意多次操作将一列轮换,求每一行的最大值之和的最大值.多组数据. Easy VersionN≤4N \leq 4N≤4,M≤100M \le ...

  2. 动态规划 —— 状压 DP

    [概述] 通常将以一个集合内的元素信息作为状态且状态总数为指数级别的动态规划称为状态压缩动态规划. 其是一类以集合信息为状态的特殊的动态规划问题,主要有传统集合动态规划与基于连通性状态压缩的动态规划两 ...

  3. POJ - 1185 炮兵阵地(状压dp)

    题目链接:点击查看 题目大意:中文题,题意很清晰,不多赘述 题目分析:最基础的状压dp,需要考虑如何转移,因为每一个炸弹所涉及的范围都是上下左右两个格子,我们可以从第一行开始向下转移,这样某一行的状态 ...

  4. [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

    一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...

  5. 状压DP UVA 10817 Headmaster's Headache

    题目传送门 1 /* 2 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 3 状压DP:一看到数据那么小,肯定是状压了.这个状态不好想,dp[s1][ ...

  6. [转]状态压缩dp(状压dp)

    状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...

  7. POJ3254 状压DP模板

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6321   Accepted: 3361 Descr ...

  8. [状压dp] 小国王(状压dp+下标映射技巧)

    文章目录 0. 前言 1. 状压dp+棋盘式(基于连通性) 0. 前言 相关: [状压dp] 蒙德里安的梦想(模板题+状压dp) 1. 状压dp+棋盘式(基于连通性) 1064. 小国王 思路: 状压 ...

  9. DP模型——状压DP

    文章目录 前言 什么是状态压缩DP 基本例题1 前期思考 状态表示 状态计算 Code 基本例题2 前期思考 状态表示 状态计算 Code 扩展 棋盘式 小国王 思考 状态表示 状态计算 Code 玉 ...

最新文章

  1. 用指针查找数组中温度值为32的天数
  2. 任意用户密码重置(四):重置凭证未校验
  3. 【编译原理】词法分析和语法分析两万字全总结(这知识它不进脑子啊~!)
  4. 【已解决】Exception in thread “main“ java.lang.NullPointerException
  5. java集合框架——接口图+类图+遗留类图
  6. 吴恩达作业5:正则化和dropout
  7. 杭电1259ZJUTACM
  8. C++ 对象模型学习记录(3)--- 第1章 关于对象(未完)
  9. excel图片变成代码_有趣的EXCELvba作图
  10. 鸿蒙系统硬盘分区,硬盘分区2种格式
  11. 3ds max制作宋惠乔的教程----作者: 火星时代 来源: 火星时代
  12. 谷歌自动启动flash
  13. pmp知识点(7)-项目成本管理
  14. 黑苹果音频卡顿_DXOMARK 公布无线音箱音质基准:苹果华为 Sonos 上榜
  15. 云:SD-WAN不断增长的驱动力
  16. 数据流图定义,特点,符号,绘制方法,数据流图的用途
  17. vue 页面卡顿(数据量大)
  18. 奋斗吧之“和loser对话”小故事
  19. 我是一只IT小小鸟(转)
  20. 学计算机的一定要独立显卡嘛,电脑没有独立显卡会怎么样

热门文章

  1. Iris鸢尾花卉数据集算法练习——PCA和K近邻分类器
  2. android高德hud导航,教你一招,手机导航秒变HUD抬头显示
  3. Android系统开发:短信的号码拦截
  4. echarts(一)之地图连线动效
  5. RPG Maker mv框架代码解析之Sprite_Button
  6. linux iso镜像怎么用u盘装,如何使用U盘安装ISO系统镜像?
  7. 服务器和网站APP为什么会被反复入侵
  8. 吐血分享:QQ群霸屏技术教程(接单篇)
  9. mac连接android手机存储,Android安卓设备连接Mac的方法
  10. linux 无法定位程序,三步搞定无法定位程序输入点 于动态链接库上