news 2026/6/10 19:03:48

0-1背包问题(回溯法)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
0-1背包问题(回溯法)

01 背包问题是什么?

问题描述:

n个物品

每个物品:

重量w[i]

价值v[i]

背包容量为W

每个物品只能选 0 次或 1 次(这就是 “01” 的由来)

目标:
在不超过背包容量的前提下,使总价值最大

举个直观例子

物品重量价值
1115
2320
3430

背包容量W = 4

选 1 + 2 → 重量 4,价值 35

只选 3 → 价值 30

最优答案:35

01 背包的回溯法在干什么?

一句话版:

回溯法 = 枚举所有“选 / 不选”的可能,通过搜索树找最优解

本质是:

深度优先搜索(DFS)

穷举解空间

用剪枝减少搜索量

注意:
回溯法不是最终高效解法,而是:

理解问题本质

讲解 DP 推导的“母体”

回溯视角下的 01 背包

每个物品只有两个选择

对第i个物品:

要么选
要么不选
所以整个问题就是一棵二叉决策树

决策树长什么样?

假设有 3 个物品:

物品1
/ \
不选 选
物品2 物品2
/ \ / \
不选 选 不选 选
物品3 物品3 物品3 物品3

树深度 = 物品个数n

每一条从根到叶子的路径 = 一种方案

叶子节点 = 一种完整选择

回溯 = 在这棵树上走、试、退

代码:

class Knapsack { private: int n; // 物品个数 double c; // 背包容量 vector<double> W; // 重量 vector<double> V; // 价值 double cw; // 当前重量 double cv; // 当前价值 double bestv; // 最优价值 void backtrace(int i) { // 所有物品都考虑完了 if (i == n) { if (cv > bestv) bestv = cv; return; } // 1️⃣ 不选第 i 个物品 backtrace(i + 1); // 2️⃣ 选第 i 个物品(前提是不超重) if (cw + W[i] <= c) { cw += W[i]; cv += V[i]; backtrace(i + 1); // 回溯 cw -= W[i]; cv -= V[i]; } } public: double getMaxVal(const vector<double>& w, const vector<double>& v, double cc) { W = w; V = v; n = W.size(); if (n == 0 || n != V.size()) return 0; c = cc; cw = 0; cv = 0; bestv = 0; backtrace(0); return bestv; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:01:57

为 Zensical 添加多语言翻译

为 Zensical 网站添加多语言翻译 本文基于当前本站正在使用的 硅基流动 Qwen3-8B 客户端翻译系统&#xff08;glm-config.js glm-translate.js&#xff09;整理而成。 只要按步骤接入&#xff0c;你就能获得和 wcowin.work 一样的多语言体验。 功能概述 客户端翻译&#xff…

作者头像 李华
网站建设 2026/6/10 12:53:32

从概念到落地:AI原生应用如何实现真正的人机协作

从概念到落地:AI原生应用实现真正人机协作的全面剖析 关键词 AI原生应用;人机协作;概念基础;实现机制;实际应用 摘要 本技术分析聚焦于AI原生应用中实现真正人机协作这一关键主题。从概念基础出发,追溯其历史轨迹并明确问题空间,构建起理论框架。进而深入探讨架构设…

作者头像 李华
网站建设 2026/6/9 21:37:27

2026年02月08日最热门的开源项目(Github)

本期榜单展示了一系列优秀的开源项目&#xff0c;主要集中在人工智能和编程工具领域。以下是对榜单的详细分析&#xff1a; 项目概述 类型和语言&#xff1a;榜单中大部分项目使用了 TypeScript 和 Python 语言&#xff0c;显示了这两种语言在现代开发中的受欢迎程度。TypeScr…

作者头像 李华
网站建设 2026/6/10 17:55:43

PETRV2-BEV模型训练全流程:从环境配置到可视化分析

PETRV2-BEV模型训练全流程&#xff1a;从环境配置到可视化分析 1. 引言 如果你对自动驾驶技术感兴趣&#xff0c;一定听说过BEV&#xff08;鸟瞰图&#xff09;感知。简单来说&#xff0c;就是让AI模型像鸟一样从空中俯视道路&#xff0c;识别出车辆、行人、障碍物等目标的三…

作者头像 李华
网站建设 2026/6/10 15:59:11

SiameseUIE在医疗文本分析中的应用:病历信息结构化

SiameseUIE在医疗文本分析中的应用&#xff1a;病历信息结构化 1. 当医生还在手动翻病历时&#xff0c;AI已经完成了结构化整理 上周和一位三甲医院信息科的朋友聊天&#xff0c;他提到一个很实际的困扰&#xff1a;科室每天收治30多位患者&#xff0c;每位患者的电子病历平均…

作者头像 李华
网站建设 2026/5/24 17:17:13

7个实战技巧精通Cantera:化学系统模拟从入门到工业应用

7个实战技巧精通Cantera&#xff1a;化学系统模拟从入门到工业应用 【免费下载链接】cantera Chemical kinetics, thermodynamics, and transport tool suite 项目地址: https://gitcode.com/gh_mirrors/ca/cantera 在化学反应工程、燃烧科学和材料研发领域&#xff0c;…

作者头像 李华