当前位置: 首页 > news >正文

20251019状压DP总结

状压DP是啥呀?

废话,状压DP不就是状态压缩动态规划吗?

有时,仅仅只是有时,题目会让你求关于几个数从一个状态到另一个状态相关问题,那么弄一个dp[2][2][2][2][2]......dp[2][2][2][2][2]......dp[2][2][2][2][2]......的数组显然是不现实的,所以状压DP由此诞生。

这几个数的状态可以看作一个二进制数,每一个数的状态随之对应二进制数的每一个数位,那么每一种这几个数的不同状态组合随之对应一个二进制数。

例题 洛谷 P2622 关灯问题 II

显然,这题bfs就能水过,但是有关状态压缩,所以值得一讲。

首先题目告诉我们有n盏灯,每盏灯可以是开或者关,有几个按钮,每个按钮按下之后可以使每盏灯开或者关,求最开始每盏灯都是开的,最少按几次按钮才能使所有等关上,如果无法实现就输出-1。

在这里介绍几个二进制状态转换的位运算操作:

  1. (n>>k)(n>>k)(n>>k)&111 取出二进制下n的第k位(从右往左)

  2. nnn&((1<<k)−1)((1<<k)-1)((1<<k)1) 取出二进制下n的右k位

  3. nnn^(1<<k)(1<<k)(1<<k) 将二进制下n的第k位取反

  4. nnn|(1<<k)(1<<k)(1<<k) 将二进制下n的第k位赋值1

  5. nnn&(((~(1<<k))(1<<k))(1<<k)) 将二进制下n的第k位赋值0

相信聪明的你根据上面的提示以及下面的代码一定能AC这道题!

#include<bits/stdc++.h>
using namespace std;
int a[105][15],n,m;
struct node{int x,dep;//状态及步数
};
queue<node> q;
bool vis[2005];//每种状态是否出现过
void bfs(){q.push({(1<<n)-1,0});//最开始所有灯都是开的while(!q.empty()){node d=q.front();q.pop();if(d.x==0){//如果所有灯都关了cout<<d.dep;exit(0);//结束程序}for(int i=1;i<=m;i++){//试每一盏灯int f=d.x;//暂时存着for(int j=1;j<=n;j++){if(a[i][j]==1&&(f&(1<<(j-1)))){//如果这个开关要把这盏灯给关掉并且第i盏灯是开着的f^=(1<<(j-1));//把这盏灯关掉}if(a[i][j]==-1&&!(f&(1<<(j-1)))){//如果这个开关要把这盏灯给打开并且第i盏灯是关着的f|=(1<<(j-1));//把这盏灯打开}}if(!vis[f]){//如果这个状态没出现过q.push({f,d.dep+1});//推入队列vis[f]=1;//现在出现过了}}}
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}bfs();cout<<-1;//无解输出-1return 0;
}

我之前好像写过耶?

http://www.dtcms.com/a/529235.html

相关文章:

  • 西部数码网站管理助手v3.0产品设计ppt案例
  • 【2073】三角形面积
  • Datawhale秋训营-“大运河杯”数据开发应用创新大赛
  • 7(内存管理)(上)(了解)
  • 成都个人建网站ps软件下载电脑版免费怎么下载
  • 解析常见的限流算法
  • 潼南区做网站的公司中国医院建设协会网站
  • 夸克 × 大模型:从“搜索工具”到“智能体”的演化逻辑
  • 网站正在建设中色综合网页程序开发工具
  • 个人怎么开网上超市福州百度seo
  • 笔试强训(八)
  • 山西品牌网站建设成品网站源码68w68游戏
  • Linux内核进程管理子系统有什么第六十八回 —— 进程主结构详解(64)
  • 做网站需要商标注册吗阿里巴巴怎么做企业网站
  • 做视频网站需要哪些技术指标wordpress可以放视频吗
  • 动态库的使用-openssl
  • Maven 项目和 Maven Web 项目的异同点
  • Maven整理
  • 关于OpenAI CLIP的综合技术报告:架构、对比预训练与多模态影响
  • 网上服装商城网站代码软件开发 网站建设
  • 保洁网站模板闲置物品交易网站怎么做
  • 11月更新|流程节点新增数据变更+发起流程
  • 【Swift】LeetCode 189. 轮转数组
  • 聊城网站托管网络舆情处置方案
  • C#的operator运算符定义
  • 南通网站建设论文网站上传用什么软件做视频格式
  • ftp备份网站wordpress进管理员密码
  • 【移动语义】C++ 移动语义的秘传心法
  • 网站营销的优势电商app系统开发公司
  • 电影wordpress福州搜索优化行业