news 2026/5/11 23:37:47

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/5/9 9:56:05

科技修仙(1)Excel入门训练学习算法——东方仙盟

核心代码核心算法// ************************** 修仙版题目配置&#xff08;含公式答案&#xff09; ************************** const xianQuestion {"title": "练气期第1关&#xff1a;学生总分悟道","rows": 6, // 作答行数"lingqiPe…

作者头像 李华
网站建设 2026/5/10 3:36:49

PasteMD剪贴板美化神器:5分钟搭建本地AI文本格式化工具

PasteMD剪贴板美化神器&#xff1a;5分钟搭建本地AI文本格式化工具 1. 为什么你需要一个本地AI文本格式化工具&#xff1f; 你有没有遇到过这种情况&#xff1f; 从网页上复制了一段会议纪要&#xff0c;格式乱七八糟&#xff0c;有奇怪的换行、多余的符号&#xff0c;想整理成…

作者头像 李华
网站建设 2026/5/10 13:45:07

Qwen3-ASR-1.7B与Dify平台集成:打造个性化语音识别应用

Qwen3-ASR-1.7B与Dify平台集成&#xff1a;打造个性化语音识别应用 最近在折腾一个智能客服的项目&#xff0c;需要把语音对话转成文字&#xff0c;市面上开源的语音识别模型试了一圈&#xff0c;效果总是不太理想。要么是识别不准&#xff0c;要么是部署太麻烦&#xff0c;要…

作者头像 李华
网站建设 2026/5/9 5:10:07

腾讯混元翻译大模型实战:Streamlit界面操作指南

腾讯混元翻译大模型实战&#xff1a;Streamlit界面操作指南 你是否经历过这样的场景&#xff1a;需要把一份中文技术文档快速翻成俄语发给海外同事&#xff0c;却发现在线翻译工具要么卡在“正在加载”&#xff0c;要么译文满是语法错误&#xff1b;又或者正为跨境电商商品页做…

作者头像 李华
网站建设 2026/5/10 20:35:39

Llava-v1.6-7b性能优化:利用GPU加速多模态推理

Llava-v1.6-7b性能优化&#xff1a;利用GPU加速多模态推理 1. 为什么需要GPU加速Llava-v1.6-7b Llava-v1.6-7b作为一款功能强大的多模态模型&#xff0c;能够同时理解图像和文本&#xff0c;在视觉问答、图像描述、内容分析等场景中表现出色。但它的70亿参数规模和复杂的视觉…

作者头像 李华
网站建设 2026/5/10 2:58:06

Qwen3-TTS语音合成惊艳效果展示:听AI说10种语言

Qwen3-TTS语音合成惊艳效果展示&#xff1a;听AI说10种语言 1. 引言&#xff1a;当AI开口说世界 想象一下&#xff0c;你正在制作一个面向全球用户的短视频&#xff0c;需要为同一个脚本配上中文、英文、日文、西班牙文等十几种语言的旁白。传统方案是什么&#xff1f;要么聘…

作者头像 李华