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

状态压缩动态规划学习笔记

本篇文章将从状态压缩入门开始讲起。

什么是状态压缩

假设你面前有 \(n\) 盏灯,每盏灯的状态有:开、关。如何表示这个状态呢?

简单,用个 bool 数组,搞定!

那,如果 \(n\) 非常大,大到数组开不下怎么办呢?

其实很简单,我们把开的状态记为 \(1\),关着的状态记为 \(0\)。那么这一串灯就可以用 \(1\)\(0\) 的二进制表示。再转换成 \(10\) 十进制就可以了。比如十个灯,状态分别为:开关开开关开开关关关,那么就可以表示为 \((1011011000)_2=(728)_{10}\)

这就是状态压缩。十分简单。

然后我们再在其基础上进行 DP 就是所谓的状压 DP 了!

因为涉及到二进制位枚举,所以数据范围一般都在 \(20\) 左右,因为 \(2^{20}\approx 10^6\),差不多就是最大值了。

例题

A:P2622 关灯问题 II

这个题目和我们上面举的例子非常像,所以很容易看出把灯状态压缩。接下来就有两种做法。

做法一

一开始的状态为 \((111\dots 1)_2\),有 \(n\)\(1\)。换成十进制就是 \(2^{n+1}-1\)。我们的目标是 \((000\dots 0)_2=(0)_{10}\),考虑搜索能否到达。用 BFS 搜索,然后就是板子了。时间复杂度 \(O(nm\cdot 2^n)\)

code:

/*
------- INFO -------
> Date:2025/12/27
> Time:09:20:03
> Filename:P2622.cpp
> Path:~/桌面/dhx/P2622.cpp
--------------------
*/
#include <iostream>
#include <queue>
#include <cstdio>
#define int long long
#define endl '\n'
using namespace std;int n,m;
int a[105][15];
bool vis[1<<11];
struct node{int x;//now statusint s;//step
};
void bfs(){queue<node> q;q.push({(1<<n)-1,0});vis[(1<<n)-1] = true;while(!q.empty()){node f = q.front();q.pop();for(int i = 1;i<=m;i++){int now = f.x;for(int j = 1;j<=n;j++){//枚举使用哪个按钮并修改if(a[i][j]==1){now = (now&(~(1<<(j-1))));}if(a[i][j]==-1){now = (now|((1<<(j-1))));}}if(vis[now]) continue;//如果访问过就不再访问vis[now] = true;// cout<<now<<endl;if(now==0){//如果是0,立即退出cout<<f.s+1;exit(0);}q.push({now,f.s+1});}}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i = 1;i<=m;i++){for(int j = 1;j<=n;j++){cin>>a[i][j];}}bfs();cout<<-1;//否则如果到最后都没有退出,得到结论:无解return 0;
}
http://www.gsyq.cn/news/164170.html

相关文章:

  • 中国建筑装饰协会推荐:2025 年度十大综合实力家装公司全名单 - 速递信息
  • 大模型结构化数据流式输出技术详解(附实例)小白到高手进阶,一篇全掌握+赶紧收藏!
  • 揭秘Open-AutoGLM部署难题:5大常见错误与避坑实战方案
  • 实用指南:SpringBoot Maven快速上手
  • 微信立减金回收靠谱平台大揭秘 - 京顺回收
  • Open-AutoGLM在哪里下载?如何确保版本安全与官方验证?
  • 面向企业的AI基础设施:TensorFlow镜像部署指南
  • Open-AutoGLM到底有多强:5大核心功能彻底改变AI编程生态
  • TensorFlow镜像适配最新CUDA驱动,充分发挥GPU性能
  • 【AI提示词优化黄金法则】:基于Open-AutoGLM的3步精准调优法
  • 如何在TensorFlow镜像中启用XLA加速提升训练效率
  • 大规模NLP任务实战:用TensorFlow镜像跑通BERT训练全流程
  • 这些软件测试面试题一定要会,自动化测试面试题(含答案)
  • 大公司都在用的AI框架:TensorFlow镜像背后的工程哲学
  • Spring Boot项目中短信通知替换为微信公众号模板消息推送的使用方案
  • 国产大模型杀疯了!GLM4.7秒杀ChatGPT,AI视频生成提速200倍,程序员必学的黑科技都在这里!
  • 【Open-AutoGLM手机部署全攻略】:手把手教你将AI模型移植到安卓设备
  • 2026软件测试经典面试题,收藏!
  • 华为OD机试双机位C卷 - 统计员工影响力分数 (C++ Python JAVA JS GO)
  • 2025年靠谱的理想改装店推荐、理想改装哪家专业? - 工业推荐榜
  • 盘式绝缘子针式绝缘子瓷瓶缺陷检测数据集VOC+YOLO格式901张4类别
  • TensorFlow镜像中的SavedModel格式:统一模型交换标准
  • 2026年最新软件测试面试题【含有答案】
  • 二手回收-路径选择决策 毛利最大化,用规则不行吗? 为什么要用AI
  • Open-AutoGLM性能优化全攻略,释放Python大模型自动化的全部潜力
  • 开源大模型时代,为何TensorFlow仍是企业首选?
  • 2025年有名的别墅设计品牌企业推荐,高性价比别墅设计公司全解析 - 工业推荐榜
  • 2025年语音机器人品牌推荐:猎户星空等十大厂商综合实力对比 - 资讯焦点
  • 基于TensorFlow的操作风险事件预测
  • 收藏!2025大模型时代AI就业全景指南+零基础学习路线(小白/程序员必看)