dp,状压dp等 一些总结
也就作业几题而已,分析一下提醒
最重要的就是,记住,没用的状态无论怎么转移最后都会是没用的状态,所以每次转移以后的有值的状态都是有用的状态。
几种思考方向:
第一种:枚举当前的状态,转移成另外一个状态
第二种:枚举最终状态,然后通过另外一个枚举能转移到这种状态
①就是给你一个地图,然后这个图上面1的可以放东西,0的不能放,问一共有n个东西,每个东西只能放在特定的几个位置上,最多有几种?POJ2441
这个问题就是,因为地图之间的每个空间都是很大的,如果只是普通的dp是无法进行状态转移的,因此这道题就是状压dp(当然数据小的话也是一种标志),然后接下来就是从上到下,然后枚举状态即可。(把上面一行的所有的状态的可能性都放过来,是从上面一种状态转移到另外一种状态)
②所有的种类问题,给你一个地图,地图上面1可以放东西,0不能放,一个有多少种放法?(放东西的次数可以为1,2,3,4...到无穷)POJ3254
这道题目虽然和上面这个题目很像,但是由于可以任意放,所以又有点变化,和第一类的主要区别在于,目前所在的这个状态是上一种条件下能够满足加入这个状态的所有状态的和
③铺砖问题UVA11270
这一类问题是轮廓线dp,但是就是状压dp的变种。
就是给你一个矩阵n*m,再给你方块,问你有多少种情况能铺满整个矩阵?
我们就是不断的递推目前的dp,然后dp的每一维的长度都是1<<m,然后我们只需要每次从上往下移位,然后转移的时候判断能否往上、往左、往下、往右、或者不放即可(当然只是其中的几种,看你怎么推了),然后最后因为矩阵满足的状态是所有被覆盖嘛,因此答案就是你目前所在的pos和(1<<m)-1
④覆盖问题 POJ2836(当然个人感觉这道题目的数据太水了。。。我的代码以奇怪的姿势都过了。。。)
给一个图,图上有n个点(都在图的线的交叉处),然后有任意大小的矩阵无穷多个,要让这些矩阵铺满所有的点(每个点可以被覆盖多次),问,覆盖掉所有的点所需要的矩阵的最小面积是多少?
我们可以得到以下的情况,我们枚举n个点,制造n*n个矩阵,然后分别要知道矩阵内部(含边界)有几个点,最后dp[s]得到就可以了
⑤罚时问题 HDU1074(逆向思考有时是dp的一把刀韧)
一个人作业没做完,每个作业有限定的期限,但是如果你不在这个限定的期限内做完的话,每过一天扣一分,然后给你n门科目,怎么做才能让自己的分数损失为最小?
首先这个是一维的状压DP,一维的状压DP有如下特点:之前的状态转移了以后就没有其他作用了
然后采用一维有以下几个特征:数组中保存的是之前的状态,更新的是目前的状态
状压dp里面很需要剪枝,然后一下有几种剪枝的可能性
①先枚举状态,再枚举所需要的另外一维。所以这个不剪枝的复杂度是O(状态的种类*另外一维的大小),然后这个时候把没用的状态给continue了就好了,那么多的状态里面肯定会消去很多种状态的,所以复杂度会下降的很快 。例如POJ2441
②如果你需要枚举之前的状态和目前所在这一行的状态的话,单纯的暴力枚举是TLE的。这个时候题目一般会告诉你每个状态之间都会有条件,而且这个条件都会把剩下来的状态变得很小,然后再暴力就好了。例如POJ3254
dp,状压dp等 一些总结的更多相关文章
- 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP
[题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...
- CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...
- hdu 4352 "XHXJ's LIS"(数位DP+状压DP+LIS)
传送门 参考博文: [1]:http://www.voidcn.com/article/p-ehojgauy-ot.html 题解: 将数字num字符串化: 求[L,R]区间最长上升子序列长度为 K ...
- [转]状态压缩dp(状压dp)
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...
- 状态压缩dp 状压dp 详解
说到状压dp,一般和二进制少不了关系(还常和博弈论结合起来考,这个坑我挖了还没填qwq),二进制是个好东西啊,所以二进制的各种运算是前置知识,不了解的话走下面链接进百度百科 https://baike ...
- 洛谷 P3343 - [ZJOI2015]地震后的幻想乡(朴素状压 DP/状压 DP+微积分)
题面传送门 鸽子 tzc 竟然来补题解了,奇迹奇迹( 神仙题 %%%%%%%%%%%% 解法 1: 首先一件很明显的事情是这个最小值可以通过类似 Kruskal 求最小生成树的方法求得.我们将所有边按 ...
- 51nod 1673 树有几多愁(链表维护树形DP+状压DP)
题意 lyk有一棵树,它想给这棵树重标号. 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号. 这棵树的烦恼值为所有叶子节点的值的乘积. lyk想让这棵树的烦恼值最大,你只需输出 ...
- BZOJ3836 [Poi2014]Tourism 【树形dp +状压dp】
题目链接 BZOJ3836 题解 显然这是个\(NP\)完全问题,此题的解决全仗任意两点间不存在节点数超过10的简单路径的性质 这意味着什么呢? \(dfs\)树深度不超过\(10\) \(10\)很 ...
- SCUT - 254 - 欧洲爆破 - 概率dp - 状压dp
https://scut.online/p/254 思路很清晰,写起来很恶心. #include<bits/stdc++.h> using namespace std; #define l ...
- bzoj1076: [SCOI2008]奖励关(期望dp+状压dp)
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2989 Solved: 1557[Submit][Statu ...
随机推荐
- C++ 学习笔记之 引用
一.定义: 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 二.用法: 基本用法 例如: int & a = b; 引用作为函数返回值 先看一个例子: #inclu ...
- lintcode-11-二叉查找树中搜索区间
二叉查找树中搜索区间 给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点.找到树中所有值在 k1 到 k2 范围内的节点.即打印所有x (k1 <= x <= k2 ...
- <Effective C++>读书摘要--Resource Management<一>
1.除了内存资源以外,Other common resources include file descriptors, mutex locks, fonts and brushes in graphi ...
- bootstrap列表添加滚动条
有时候列表中数据过多,导致超出页面,影响视觉感受.这时我们需要添加一个滚动条. 初始状态如图: 代码如下: <ul class="list-group"> <li ...
- LoadRunner中执行命令行
在LoadRunner可以使用函数system()来调用系统指令,结果同在批处理里执行一样,但是system()有个缺陷:无法获取命令的返回结果. 也许可以用`echo command > fi ...
- [C/C++] 结构体存储问题
64位操作系统,不同类型变量对应的字节数为: char : 1个字节 char*(即指针变量) : 8个字节 //32位占4个字节 short int : 2个字节 int : 4个字节 unsign ...
- springBoot配置分析(属性和结构化)
使用idea自带插件创建项目 一直下一步到完成 application.properties local.ip.addr = 192.168.2.110 redis.host = 192.168.3. ...
- Json-转自菜鸟教程
1. python中为什么用json有什么作用??不是python用json,json是类似xml的一种通用格式,在很多地方都可以用.json相比xml,数据量更小,而且可以很方便的和解释型语言的结构 ...
- Andorid API Package ---> android
包名: android Added in API level 1 URL:http:// ...
- CentOS 服务ftp(vsftpd)
1.检查是否已经安装vsftpd yum list installed | grep vsftpd 2.安装vsftpd yum install -y vsftpd 3.检查vsftpd system ...