状压dp(总结)状态压缩】的更多相关文章

嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的地方,希望大家指出. 闲话不多说,进入正题. 首先,在介绍状压dp之前,我们先来了解一下状态压缩(常用的为二进制,why?[因为其他的我不会]). 什么是状态压缩呢?顾名思义,就是将数转换为二进制来进行一些操作. 基本操作: 看完基本操作,我们来看一下一些稍微复杂的操作. 操作 运算 取出整数n在二…
题意: 有一块n*m的土地 0代表不肥沃不可以放牛 1代表肥沃可以放牛 且相邻的草地不能同时放牛 问最多有多少种放牛的方法并对1e8取模 思路: 典型的状压dp 能状态压缩 能状态转移 能状态压缩的题的特点就是只有两种状态 所以用0 1表示两种状态 用位运算判断是否符合条件 然后将前一行的合理状态转移到后一行 最后统计最后一行的状态 dp[i][j]代表第i行以第j种状态放牛时有多少种不同的状态 (c++的语言特性是 封装 继承 多态~) /* *************************…
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1626.html 题目传送门 - 51Nod1626 题意 题解 首先考虑形象的想象本题中的思维空间.我们把整个 2*2*3*n 的四维空间看作 n 个 2*2*3 的三维空间顺次排列.考虑到 1*1*1*2 的方块,我们如果把边长 2 放在第 4 维上,相当于是填充了连续两个三维空间的对应位置.否则,边长 1 就放在了第 4 维上,相当于在一个三维空间中填充 1*1*2 的方块. 然后我们考虑状压…
状压DP 就是状态压缩DP.所谓状态压缩,就是将一些复杂的状态压缩起来,一般来说是压缩为一个二进制数,用01来表示某一元素的状态. 比如一排灯泡(5个) 我们可以用一串二进制01串来表示他们的状态 11111就是全开 00000就是全关 00001就是只开了第五个 00101就是第三和第五个开了 以此类推.....而这个二进制串是可以用一个十进制数表示的 比如31就是11111 ,1就是00001等等,这样我们在遍历的时候就不用将五个灯泡疯狂循环,只需要从0遍历到31即可 大大节省了时空. 这里…
[以下内容仅为本人在学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] 引言 动态规划虽然已经是对暴力算法的优化,但在某些比较特别的情况下,可以通过一些小技巧进一步对其优化,通产我们会在时间与空间中做权衡,在时间可以接受度范围内,适当的以时间为代价换取更小空间的占用:在不爆空间的情况下,适当的以空间换时间.在此,本人将以目前总结的经验详细介绍状态压缩与状压DP. 状态压缩 (一)状态 状态指某个事物表现出来的形态(百度百科).联系前面的文章(有关…
[题目]1920 空间统计学 [题意]给定m维空间中的n个点坐标,满足每一维坐标大小都在[0,3]之间,现在对于[0,3*m]的每个数字x统计曼哈顿距离为x的有序点对数.\(n \leq 2*10^5,m \leq 9\). [算法]状压DP m范围很小,考虑设计状压DP的状态,可以想到设到达某个坐标j(将m维坐标压成m位四进制数)步数为k(距离等价于步数)的点数,但是难以转移.考虑按维转移,考虑每一维往外走的情况来转移. 设\(f_{i,j,k}\)表示前i维,到达坐标j,步数为k的点数.转移…
链接:https://ac.nowcoder.com/acm/contest/946/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262875K,其他语言525750K 64bit IO Format: %lld 题目描述 筱玛是一个热爱阅读的好筱玛,他最喜欢的事情就是去书店买书啦! 一天,他来到一家有 n n本书的书店,筱玛十分快乐,决定把这家店里所有的书全部买下来. 正巧今天店里在搞促销活动,包含若干个促销方案.每个促销方案是由指定的若干本书构成的集合,…
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门  原题目描述在最下面.  在区间内把整数看成一个阿拉伯数字的集合,此集合中最长严格上升子序列的长度为k的个数. 思路:  看了大神的博客感觉这东西是真难想到.状压dp预处理状态,数位dp计算答案.  nex[i][j]表示在状态i(状态i的二进制中为1表示这个数存在LIS中,反之不存在),选取加入第j的数字之后的状态.  然后这题k最大也只有10,因为只有10个数字.所以状态只有1024种.这题还要处理一下前导0. AC代码:…
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比较容易了 举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述一下某一行的某种状态: 设n = 9: 有二进制数 100011011(九位),每一位表示该农田是否被占用,1表示用了,0表示没用,这样一种状态就被我们表示出来了:见下表 列 数 1 2 3 4 5 6 7 8 二进制 1…
https://www.luogu.org/problem/show?pid=2704 题意: 炮兵在地图上的摆放位子只能在平地('P') 炮兵可以攻击上下左右各两格的格子: 而高原('H')上炮兵能够攻击到但是不能摆放 求最多能摆放的炮兵的数量 就是这个意思. 难度提高,弱省省选 一开始是想写dfs(迷之八皇后)的, 但是看到数据量100就想dp了: 因为题目n的范围给的很少n<=10,想到状压 非常明显是一个状态压缩的dp(状压dp) 其实可以当做状压的入门题目来做. 由于本行的状态是由前若…