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

状态压缩+状压DP之旅行商问题

状压

意义

顾名思义:状态压缩

什么是状态压缩呢?

简单来说就是用一个\(n\)进制数,每一位上代表着某一个节点或是其他东西地状态。

常见的都是二进制,因为二进制明显更加好写,毕竟那么一大堆位运算可不是摆设。

常见用法

接下来的运算均从第0位开始

  1. 判断一个数字x二进制下第i位是不是等于1。
    方法: (1 << i) & x / (x >> i) & 1

  2. 将一个数字x二进制下第 i 位更改成 1。
    方法: x = x | (1 << i)

  3. 将一个数字x二进制下第 i 位更改成 0。
    方法: x = x & ~(1 << i)

  4. 把一个数字二进制下最靠右的第一个1去掉。
    方法: x = x & (x - 1)

  5. 统计二进制中 1 的个数
    方法: __builtin_popcount(x)

最简单的例题

题面描述

给定 \(n\) 个非负整数 \(a_1,a_2,a_3,\ldots,a_n\)。请你从中任意选择恰好 \(m\) 个整数,使得这 \(m\) 个整数的和不超过 \(k\)
请求出有多少种不同的选择方案。

做法

  • 我们定义第\(i\)位为\(0\)时,代表该数没有被选。

  • 反之,当第\(i\)位为\(1\)时,代表该数已被选。

恰好\(m\)个整数我们可以用__builtin_popcount(x)函数来算有多少个\(1\)

  • 如果不为\(m\)
    直接退出,去遍历下一个状态
  • 如果为\(m\),就往下遍历。
    每一次只需要找哪些位为\(1\),并把对应的数加起来即可。
    找哪些位为\(1\),有两种做法。
  1. 每次找到最右边的\(1\),加完对应的数再减掉。
  2. 直接遍历from 1 to n,去找哪些位为\(1\)

代码

戳我
int a[N];signed main() {int n = re, m = re, k = re;for (int i = 1; i <= n; i++) a[i] = re;int ans = 0;for (int i = 0; i < (1 << n); i++) if (__builtin_popcount(i) == m) {int cnt = 0;for (int j = 1; j <= n; j++) if ((i >> j - 1) & 1) cnt += a[j];ans += cnt <= k;}wr(ans), endl;
}

状压DP

意义

也是顾名思义,以某个状态去记录答案。

简单例题 最短 Hamilton 路径

做法

定义\(dp_{s,j}\)表示在\(S\)这个集合内,以\(j\)为终点的最短距离。

状态转移方程式:$$dp_{s,j} = min(dp_{i \oplus (1 << j),k} + graph_{k,j}) 且 j,k \in s,j \not= k$$

代码

别戳我
int n;
int a[N][N];
int dp[M][N];//表示集合S内的最短路径signed main() {n = re;for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) graph[i][j] = re;memset(dp, 0x3f, sizeof dp);dp[1][0] = 0;for (int s = 1; s < (1 << n); i++) {for (int j = 0; j < n; j++) {if ((s >> j) & 1) {for (int k = 0; k < n; k++) {if ((s ^ (1 << j)) >> k & 1) dp[s][j] = min(dp[s][j], dp[s ^ (1 << j)][k] + graph[k][j]);}}}}wr(dp[(1 << n) - 1][n - 1]);
}
http://www.jsqmd.com/news/367077/

相关文章:

  • 2026年知名的大角度二段力铰链/不锈钢二段力铰链销售厂家推荐哪家好(真实参考) - 行业平台推荐
  • 快速搭建音频分类API:CLAP镜像实战教程
  • AI绘画新体验:美胸-年美-造相Z-Turbo镜像实战
  • YOLO12快速入门:从部署到实现智能相册标注
  • Janus-Pro-7B效果实测:对比传统模型的图像理解与生成优势
  • 企业文档管理神器:WeKnora问答系统部署全指南
  • 2026年贵州安全工程师培训TOP5机构名单出炉 - 精选优质企业推荐榜
  • 跨境检索新方案:Qwen3-Embedding-4B多语种实战部署
  • 深圳跨境物流哪家好?5大知名货代品牌核心优势对比 - 深度智识库
  • GLM-4-9B-Chat-1M模型:企业级长文本分析从部署到应用
  • ChatGLM-6B效果实测:智能对话的惊艳表现
  • AI瑜伽女孩生成器:雯雯的后宫-造相Z-Image使用全解析
  • 2026年热门的进口品牌全屋定制五金/全品类全屋定制五金哪家强生产厂家实力参考 - 行业平台推荐
  • 2026年值得信赖的外贸网站谷歌优化/wordpress网站谷歌优化推荐公司 - 行业平台推荐
  • 阿里千问QwQ-32B:开箱即用的文本生成神器
  • 腾讯AI效能评估实践:架构师教你如何适配“小模型+大场景”评估
  • 电商场景下Lychee Rerank多模态排序优化方案
  • 2026年质量好的代理记账/河南代理记账专业企业推荐 - 行业平台推荐
  • 造相Z-Image三档模式对比:Turbo/Standard/Quality效果实测
  • 远程桌面中转——VNC Repeater架设方案文档
  • Gemma-3-12B新手入门:从安装到实现第一个图像理解案例
  • Qwen-Image-Lightning开源镜像优势:轻量、稳定、中文友好三重突破
  • 天虹提货券回收成功后,资金多久到账? - 京顺回收
  • gemma-3-12b-it部署案例:Ollama免环境配置实现图文理解推理
  • 2026年知名的KNX智能家居品牌/KNX智能家居灯光更新厂家选择指南哪家好 - 行业平台推荐
  • PSD 车位可视化异常总结
  • 零基础入门灵感画廊:从梦境描述到惊艳画作的全流程指南
  • 告别云端依赖:DeepSeek-R1本地对话系统部署详解
  • 2026年评价高的中心供氧汇流排/集中中心供氧可靠供应商参考哪家靠谱(可靠) - 行业平台推荐
  • cv_unet_image-colorization镜像免配置:Streamlit一键启动开箱即用