动态规划之状态压缩DP
二进制表示状态
每一个数都应该对应集合的一种状态,数字和状态是一一对应的
状态的转移
我们用二进制的0和1表示一个二元集合的状态。可以简单认为某个物品存在或者不存在的状态。由于二进制的0和1可以转化成一个int整数,也就是说我们用整数代表了一个集合的状态。这样一来,我们可以用整数的加减计算来代表集合状态的变化。
解决问题
解决问题,在动态规划中,不能脱离状态和决策。
位运算相关的知识。
- ’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。例如3(11)&2(10)=2(10)。
- ’|’符号,x|y,会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值。例如3(11)|2(10)=3(11)。
- ’^’符号,x^y,会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值。例如3(11)^2(10)=1(01)。
- ’<<’符号,左移操作,x<<2,将x在二进制下的每一位向左移动两位,最右边用0填充,x<<2相当于让x乘以4。相应的,’>>’是右移操作,x>>1相当于给x/2,去掉x二进制下的最有一位。
这四种运算在状压dp中有着广泛的应用,常见的应用如下: - 判断一个数字x二进制下第i位是不是等于1。
方法:if ( ( ( 1 << ( i - 1 ) ) & x ) > 0)
将1左移i-1位,相当于制造了一个只有第i位上是1,其他位上都是0的二进制数。然后与x做与运算,如果结果>0,说明x第i位上是1,反之则是0。 - 将一个数字x二进制下第i位更改成1。
方法:x = x | ( 1<<(i-1) )
证明方法与1类似,此处不再重复证明。 - 把一个数字二进制下最靠右的第一个1去掉。
方法:x=x&(x-1)
感兴趣的读者可以自行证明。
动态规划之状态压缩DP相关推荐
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- 由NP完全问题引出动态规划——状态压缩DP
" 所有部分都应当在非强制的情况下组合回一起.要记住,你重组的那部分原来就是你拆解的.因此,如果你不能让它们组合回来的话,那一定是有原因的.要想尽一切办法,除了用锤头." – IB ...
- 动态规划(5)状态压缩dp
一.概述 动态规划的过程是随着阶段不断增长,在每个状态维度上不断扩展.在任意时刻,已经求出最优解的状态与尚未求出最优解的状态在各维度上的分界点组成了dp扩展的轮廓,对于某些问题,我们需要在动态规划的状 ...
- 第一章 动态规划 状态压缩DP
1.基本概述 状态压缩dp和状态机一样,都是一种特殊的状态表示方式.状态机用一系列小状态表示某一状态.状态压缩dp用二进制数进行表示.虽然看代码起来时间复杂度比较高,但是很多的情况都给剪枝掉了. 状态 ...
- 动态规划-状态压缩DP
[SCOI2005] 互不侵犯 题目描述 https://www.luogu.com.cn/problem/P1896 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它 ...
- 【动态规划】状态压缩动态规划
整理的算法模板合集: ACM模板 目录 一.集合类状态压缩动态规划 A. AcWing 91. 最短Hamilton路径 B.AcWing 524. 愤怒的小鸟 二.连通类(棋盘类)状态压缩动态规划 ...
- 状态压缩DP AcWing算法提高课 (详解)
基础课的状态压缩点这里 基础课中 蒙德里安的梦想 属于 棋盘式状态压缩dp,最短Hamilton路径 属于 集合状态压缩dp 1064. 小国王(棋盘式/基于连通性) 这种棋盘放置类问题,在没有事先知 ...
- 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
[BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...
- 状态压缩DP(大佬写的很好,转来看)
奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ...
- [转]状态压缩dp(状压dp)
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...
最新文章
- 迁移学习之EfficientNetBX(图像识别)
- 总结FormsAuthentication的使用
- 开源you-get项目爬虫,以及基于python+selenium的自动测试利器
- 珠宝管理系统java,基于jsp的珠宝首饰进销存管理系统-JavaEE实现珠宝首饰进销存管理系统 - java项目源码...
- Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean 解决方案
- (五)流比特币价格的AI预测和异常检测
- Nginx反向代理及简单负载均衡配置
- 21年美赛F题-DEA模型和逻辑回归模型
- 五笔字型末笔识别码的真正含义
- python3爬虫系列20之反爬需要登录的网站三种处理方式
- Android 最常用的设计模式五 安卓源码分析——建造者模式
- ECMASript 6 新特性
- 自学JQuery Mobile的几个例子
- Windows Server 2016-增强IPAM
- 工具篇-sdkman-SDK管理利器
- switch范围判断、switch区间判断
- iOS开发 图片选择器、图片多选功能的实现
- 517编程 【初级班】 第八课 D. 结尾0的个数
- 不懂英语怎么做亚马逊_亚马逊的回声秀可以做的一切其他回声都做不到
- 牧场物语矿石镇的伙伴们详细攻略
热门文章
- Swift - EasingAnimation绘制圆环动画
- 写给笨人的法线贴图原理 【转】
- Find n‘th number in a number system with only 3 and 4
- DataSet如何处理海量数据
- 孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理
- 计算机专业新手博客,【转载】学计算机必读献给计算机专业大一新生(1)
- C++输入变长字符串
- tensorflow数据预处理
- os.path.join()函数
- 图卷积神经网络GCN ---如何在交通预测中考虑网络拓扑结构