【概述】

通常将以一个集合内的元素信息作为状态且状态总数为指数级别的动态规划称为状态压缩动态规划。

其是一类以集合信息为状态的特殊的动态规划问题,主要有传统集合动态规划与基于连通性状态压缩的动态规划两种。

其原理是通过二进制位运算将状态压缩(用整数表示集合)作为动态规划的状态来解决问题。

通常具备以下两个特点:

  1. 数据规模的某一维或几维特别小
  2. 需要具备动态规划问题的两个基本性质:最优性原理、无后效性原则

为更好的理解状压 DP,首先要有相关的位运算知识,关于位运算:点击这里。

【使用条件】

在任意时刻,已经求出最优解的状态与尚未求出最优解的状态在各维度上的分界点组成了 DP 扩展的轮廓,对于某些问题,需要在动态规划的状态中记录一个集合,保存这个轮廓的详细信息,以便进行状态转移。

若集合大小不超过 n,集合中每个元素都是小于 k 的自然数,则可以把这个集合看作一个 n 位 k 进制数,以一个  之间的十进制整数的形式作为 DP 状态的一维。

【使用技巧】

1.状压 DP 题型

1)数据 n≤16 ,但状态总数可达指数级

2)满足无后效性原则,通过前面的状态知道后面的怎么选,用 1、0 来记录状态是否存在

2.一般定义二维数组

第一维是第几排(如:铺砖块等)

第二维标识状态,0 或 1

3.数组初始化

根据题设设置初值,一般为 memset(dp,127,sizeof(dp));

再进行状态更新:

for(int i=0;i<n;i++)   dp[i][1<<i]=0; 

表示 i 在 state 中存在,这里的 1<<i 就是一种只选 i 的 state

4.枚举状态循环求值

for(int i=1;i<=n;i++)
{for(int j=0;j<(1<<m);j++){if(check(i,j))//判断当前行满足条件的state{for(int k=0;k<(1<<m);k++)//枚举上一行的pre_state进行更新{...}}}
}

5.判断状态中的每一个是否符合要求

for(int i=sum;i!=0;i=(i-1)&sum)
{...
}

【例题】

1.入门题

  1. Corn Fields(POJ-3254):点击这里
  2. 最小总代价(洛谷-U17433):点击这里
  3. Necklace(HDU-3091):点击这里
  4. Most Powerful(ZOJ-3471):点击这里

2.TSP 问题

  1. Hie with the Pie(POJ-3311)(状压+Floyd求最短路):点击这里
  2. Traveling(HDU-3011)(三进制的压缩):点击这里
  3. Tourism Planning(HDU-4096)(注意满意度的计算):点击这里

3.其他

  1. 炮兵阵地(POJ-1185)(三层状态的判断):点击这里
  2. Pieces(HDU-4628)(回文字串的判断):点击这里
  3. Mondriaan's Dream(POJ-2411)(贴砖块问题):点击这里
  4. Doing Homework(HDU-1074)(状压+递归输出):点击这里
  5. 方格取数(1)(HDU-1565)(需进行预处理,计算合法数据个数):点击这里
  6. Riddle(2018 CCPC (秦皇岛站) I 题)(互斥的状态):点击这里

动态规划 —— 状压 DP相关推荐

  1. 【动态规划 状压dp】JZOJ_6316 djq的朋友圈

    题意 给出一张图,有若干点之间连边,边权∈{0,1}\in\{0,1\}∈{0,1},对于点1,与它直接连边的点且边权为0,就是盟友,否则是情敌:间接连边,就要按某种顺序同时列出它们的熟人,如果关系相 ...

  2. 【动态规划】状压dp:蓝桥2020补给(旅行商问题)

    问题可以转换为: 从0出发途径每个城市至少一次返回0求最短路径: 解法:动态规划(状压dp)+Floyd预处理最短路径(从一个城市到另一个城市走最短路即可,不需考虑途径什么城市) [动态规划笔记]状压 ...

  3. 牛客题单_动态规划课程状压dp习题

    牛客题单_动态规划课程状压dp习题 文章目录 牛客题单_动态规划课程状压dp习题 NC14732 锁 NC15034 德玛西亚万岁 NC16418 宝藏 NC17061 多彩的树 NC17890 方格 ...

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

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

  5. POJ3254 状压DP模板

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

  6. 百练4124:海贼王之伟大航路(状压DP)

    题目来源:http://bailian.openjudge.cn/practice/4124/ 4124:海贼王之伟大航路 总时间限制: 1000ms  内存限制: 65536kB 描述 " ...

  7. 【算法竞赛学习笔记】状压DP

    title : 状压DP date : 2022-3-5 tags : ACM,图论,动态规划 author : Linno 状压DP 状态压缩,是利用二进制数的性质对问题进行优化的一种算法,经常与搜 ...

  8. NC15034 德玛西亚万岁(状压dp)

    链接:https://ac.nowcoder.com/acm/problem/15034 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意识 ...

  9. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

最新文章

  1. iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信
  2. MySQL如何判别InnoDB表是独立表空间还是共享表空间
  3. 034_webpack中的加载器
  4. 谈谈“无线网络”与“网络监控”那些小事儿
  5. 求一个数字中1的个数
  6. BST-V51开发板用c语言,小代码 向原文学习 BST 简单的C语言版本
  7. 红警 for Mac合集(Red Alert红色警戒)
  8. python适用于什么系统_Python适合在什么系统
  9. 【已解决】华硕电脑关闭触摸板,安装完触摸板驱动,Fn+F9仍然无法解决问题
  10. java基础练习实例_java基础练习题百度云.doc
  11. django+layui图片上传(用户头像修改,实时预览)
  12. Install Anjuta
  13. Java多线程并发面试
  14. 加密解密在区块链中的应用
  15. UE4中的GameMode、GameState、GameInstance
  16. 外地户籍应届毕业生落户上海申请及办理流程(2017更新)
  17. STM32f103 SMO滑膜观测器的 无感无刷FOC驱动DIY
  18. 计算机房系统进入方法,学校机房电脑系统恢复的方法
  19. vue3+ts项目中使用水球图
  20. 互联网云厂商,打响能源TO B争夺战

热门文章

  1. Simulink之交流调压电路
  2. STM32之中断嵌套控制器
  3. docker添加jar包_Docker部署jar包
  4. 2020 大厂研发岗薪酬排名出炉,看完我真的拖后腿了。。。
  5. 线程池最佳线程数量到底要如何配置?
  6. 去掉烦人的 “ ! = null (判空语句)
  7. 原创|面试官:线上服务器CPU占用率高如何排查定位问题?
  8. 为什么美团全面推动 K8S 落地,咬紧牙关也要搞云原生?
  9. 2020年10月份Github上热门的开源项目
  10. 开发指南专题十六:JEECG微云快速开发平台Excel导出