news 2026/3/10 7:29:39

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/3/8 13:19:54

第九章-DAG上的动态规划

DAG模型 嵌套矩形问题 有n个矩形&#xff0c;每个矩形可以用两个整数a,b描述&#xff0c;表示它的长和宽。矩形x(a,b)可以嵌套在矩形Y(c,d)中&#xff0c;当且仅当a<c,b<d&#xff0c;或者b<c,a<d(相当于把矩形 X旋转90)。例如&#xff0c;(1,5)可以嵌套在…

作者头像 李华
网站建设 2026/3/8 14:54:15

KTV存酒系统与计算机软考背包算法:关联、用途及考题解析

KTV存酒系统与计算机软考背包算法&#xff1a;关联、用途及考题解析在计算机软考&#xff08;如软件设计师、系统分析师&#xff09;中&#xff0c;背包算法是高频考点&#xff0c;其核心逻辑是“在有限约束条件下&#xff0c;实现资源的最优分配”&#xff1b;而在KTV日常运营…

作者头像 李华
网站建设 2026/3/8 13:19:52

2026-02-09 全国各地响应最快的 BT Tracker 服务器(移动版)

数据来源&#xff1a;https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1http://211.75.205.187:80/announce广东佛山移动352udp://211.75.210.221:6969/announce广东广州移动363http://211.75.205.189:6969/announce广东广州移动364udp://132.226.6.145:6969/announ…

作者头像 李华
网站建设 2026/3/8 13:19:50

格雷码:为什么只在异步FIFO里混得开?

数据从一个时钟域传到另一个时钟域,时序稍微对不上,就会采到不确定的亚稳态值。这在芯片里是大忌,可能导致整个系统逻辑错乱。格雷码的设计思路很直接:相邻两个数之间只变一位。十进制 二进制 格雷码3 011 0104 100 110 (只变最高位)5 …

作者头像 李华
网站建设 2026/3/8 13:19:49

实时手机检测镜像运维手册:Supervisor日志分析与故障自愈技巧

实时手机检测镜像运维手册&#xff1a;Supervisor日志分析与故障自愈技巧 1. 项目概述 1.1 系统简介 这是一个专为手机检测场景优化的轻量级AI系统&#xff0c;基于阿里巴巴达摩院的DAMO-YOLO模型和TinyNAS技术构建。系统采用"小、快、省"的设计理念&#xff0c;特…

作者头像 李华
网站建设 2026/3/7 4:32:40

RMBG-2.0在电商中的应用:商品图批量抠图实战分享

RMBG-2.0在电商中的应用&#xff1a;商品图批量抠图实战分享 电商运营中&#xff0c;一张干净、专业、背景透明的商品主图&#xff0c;往往就是转化率提升的关键一环。但现实是&#xff1a;每天要处理上百张不同光源、不同材质、不同边缘复杂度的产品图&#xff1b;美工人力有…

作者头像 李华