【背包dp】小結

背包問題總結

一、什么是背包問題?

定義:給定一個容量為 W 的背包和 n 件物品,每件物品有一個重量 w[i] 和價值 v[i],要求選擇若干物品放入背包,在不超過容量的前提下,使總價值最大

背包問題本質是:約束優化 + 組合選擇


二、什么時候考慮用“背包思想”?

你可以在如下類型的問題中嘗試用背包建模:

題目特征關鍵詞是否適合背包建模?
有一個資源上限(如時間、錢、容量)“最多”、“不超過”、“限制在…”資源即背包容量
有多個選項可選,每個選項有代價和收益“每個選擇有花費和收益”、“從中選擇一些”每個選項就是一個“物品”
要最大化或最小化一個目標值(如最大收益、最小時間)“求最大值/最小值”、“最優”屬于優化問題
每個選項只能選一次/多次/無限次“可重復選”/“不可重復”可映射到 0-1、完全、多重背包
組合問題,多個變量之間的選擇組合“在多個物品中挑選”用狀態轉移建模組合方式

一句話記憶
多個物品(選項),有一個資源限制,要做出最優組合決策,就可以考慮“背包思想”。


三、常見背包模型(及其差異)

類型是否可重復限制條件應用舉例
0-1 背包每個物品最多選一次挑戰任務只能做一次
完全背包是(無限)每個物品可選任意次硬幣兌換、無限庫存商品
多重背包是(有限)每個物品最多選 k 次有限庫存下的選購問題
分組背包分組內最多選一個每組內只能選一個每種類別選一個代表
混合背包混合限制混合以上任意模型綜合現實場景,如同時有限和無限物品
二維/多維背包多維限制除重量外還有其他限制同時限制時間/金錢等多種資源

四、狀態表示 & 轉移方程

通用思路

  • 狀態定義:dp[i][j] 表示前 i 個物品中,容量為 j 時可獲得的最大價值。

  • 狀態轉移:

    • 不選第 i 個物品dp[i][j] = dp[i-1][j]
    • 選第 i 個物品dp[i][j] = dp[i-1][j - w[i]] + v[i](要滿足 j >= w[i]

狀態壓縮(降維優化)

因為 dp[i][*] 只依賴于 dp[i-1][*],所以可以使用一維數組。

各類背包的一維優化寫法對比:

類型j 遍歷順序解釋
0-1 背包for j from W down to w[i]倒序:防止多次選擇同一物品
完全背包for j from w[i] to W正序:允許重復使用當前物品
多重背包(二進制拆分)拆成若干個 0-1 物品后處理防止超時

五、例題歸類(每種類型都附帶一個經典應用)

背包類型題目示例描述
0-1 背包經典最大價值問題n 件物品,每個選一次,背包容量為 W
完全背包硬幣兌換無限數量的硬幣組成目標金額
多重背包商品選購每種商品有庫存限制
分組背包項目選擇每類項目只能選一個,例如 CPU/顯卡/內存 各選一個
混合背包商店打折組合有些商品有限,有些無限
二維背包同時限制金錢和時間如同時給出“時間限制”和“重量限制”

六、注意事項 & 常見錯誤

問題錯誤描述正確做法
遍歷順序寫錯完全背包使用倒序完全背包需正序遍歷 j
狀態轉移寫錯忘了判斷 j >= w[i]加上條件判斷
多重背包暴力寫法超時三重循環二進制拆分優化
使用二維數組時初始化錯未初始化第 0 行初始化 dp[0][*] 為 0

七、總結口訣

背包問題口訣:

多個物品選幾個,容量限制是核心;
選或不選看約束,價值最大找最優;
可重復用正序掃,只能選一次就倒流;
多重拆成 0-1 背,分組記得內部分組選。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83661.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

濟南國網數字化培訓班學習筆記-第三組-1-電力通信傳輸網認知

電力通信傳輸網認知 電力通信基本情況 傳輸介質 傳輸介質類型(導引與非導引) 導引傳輸介質,如電纜、光纖; 非導引傳輸介質,如無線電波; 傳輸介質的選擇影響信號傳輸質量 信號傳輸模式(單工…

代碼隨想錄算法訓練營第六十四天| 圖論9—卡碼網47. 參加科學大會,94. 城市間貨物運輸 I

每日被新算法方式轟炸的一天,今天是dijkstra(堆優化版)以及Bellman_ford ,嘗試理解中,屬于是只能照著代碼大概說一下在干嘛。 47. 參加科學大會 https://kamacoder.com/problempage.php?pid1047 dijkstra&#xff08…

upload-labs通關筆記-第8關 文件上傳之點繞過

目錄 一、點繞過原理 二、deldot()函數 三、源碼分析 四、滲透實戰 1、構建腳本test8.php 2、打開靶場 3、bp開啟攔截 4、點擊上傳 5、bp攔截 6、后綴名增加點 7、發包并獲取腳本地址 8、訪問腳本 本文通過《upload-labs靶場通關筆記系列》來進行upload-labs靶場的滲…

Spring Web MVC————入門(3)

今天我們來一個大練習,我們要實現一個登錄界面,登錄進去了先獲取到登錄人信息,可以選擇計算器和留言板兩個功能,另外我們是學后端的,對于前端我們會些基礎的就行了,知道ajax怎么用,知道怎么關聯…

PhpStudy | PhpStudy 工具安裝 —— Windows 系統安裝 PhpStudy

🌟想了解這個工具的其它相關筆記?看看這個:[網安工具] 服務器環境配置工具 —— PhpStudy 使用手冊 筆者備注:Windows 中安裝 PhpStudy 屬于傻瓜式安裝,本文只是為了體系完善而發。 在前面的章節中,筆者簡…

K230 ISP:一種新的白平衡標定方法

第一次遇見需要利用光譜響應曲線進行白平衡標定的方法。很好奇是如何利用光譜響應曲線進行白平衡標定的。 參考資料參考:K230 ISP圖像調優指南 K230 介紹 嘉楠科技 Kendryte 系列 AIoT 芯片中的最新一代 AIoT SoC K230 芯片采用全新的多核異構單元加速計算架構&a…

通俗解釋Transformer在處理序列問題高效的原因(個人理解)

Transformer出現的背景 CNN 的全局關聯缺陷卷積神經網絡(CNN)通過多層堆疊擴大感受野,但在自然語言處理中存在本質局限: 局部操作的語義割裂:每個卷積核僅處理固定窗口(如 3-5 詞),…

Java 多線程基礎:Thread 類核心用法詳解

一、線程創建 1. 繼承 Thread 類(傳統寫法) class MyThread extends Thread { Override public void run() { System.out.println("線程執行"); } } // 使用示例 MyThread t new MyThread(); t.start(); 缺點:Java 單…

Django 中時區的理解

背景 設置時區為北京時間 TIME_ZONE ‘Asia/Shanghai’ # 啟用時區支持 USE_TZ True 這樣設置的作用 前端 (實際上前端el-date-picker 顯示的是當地時區的時間) Element組件轉換后,我們是東八區,前端傳給后端的時間為&…

C# 深入理解類(成員常量)

成員常量 成員常量類似前一章所述的局部常量,只是它們被聲明在類聲明中而不是方法內,如下面的 示例: 與局部常量類似,用于初始化成員肯量的值在編譯時必須是可計算的,而且通常是一個預定 義簡單類型或由它們組成的表達…

【深度學習】#12 計算機視覺

主要參考學習資料: 《動手學深度學習》阿斯頓張 等 著 【動手學深度學習 PyTorch版】嗶哩嗶哩跟李沐學AI 目錄 目標檢測錨框交并比(IoU)錨框標注真實邊界框分配偏移量計算損失函數 非極大值抑制預測 多尺度目標檢測單發多框檢測(S…

MCP實戰:在扣子空間用扣子工作流MCP,一句話生成兒童故事rap視頻

扣子最近迎來重要更新,支持將扣子工作流一鍵發布成MCP,在扣子空間里使用。 這個功能非常有用,因為我有很多業務工作流是在扣子平臺上做的,兩者打通之后,就可以在扣子空間里直接通過對話方式調用扣子工作流了&#xff0…

Redis學習打卡-Day3-分布式ID生成策略、分布式鎖

分布式 ID 當單機 MySQL 已經無法支撐系統的數據量時,就需要進行分庫分表(推薦 Sharding-JDBC)。在分庫之后, 數據遍布在不同服務器上的數據庫,數據庫的自增主鍵已經沒辦法滿足生成的主鍵全局唯一了。這個時候就需要生…

LabVIEW光譜信號仿真與數據處理

在光譜分析領域,LabVIEW 憑借其圖形化編程、豐富函數庫及強大數據處理能力,成為高效工具。本案例將介紹如何利用 LabVIEW 仿真光譜信號,并對實際采集的光譜數據進行處理,涵蓋信號生成、數據采集、濾波、分析及顯示等環節。 ? 一…

nginx相關面試題30道

一、基礎概念與核心特性 1. 什么是 Nginx?它的主要用途有哪些? 答案: Nginx 是一款高性能的開源 Web 服務器、反向代理服務器及負載均衡器,基于事件驅動的異步非阻塞架構,擅長處理高并發場景。 主要用途:…

數據庫實驗報告 數據定義操作 3

實驗報告(第3次) 實驗名稱 數據定義操作 實驗時間 10月12日1-2節 一、實驗內容 1、本次實驗是用sql語句創建庫和表,語句是固定的,要求熟記這些sql語句。 二、源程序及主…

霍夫圓變換全面解析(OpenCV)

文章目錄 一、霍夫圓變換基礎1.1 霍夫圓變換概述1.2 圓的數學表達與參數化 二、霍夫圓變換算法實現2.1 標準霍夫圓變換算法流程2.2 參數空間的表示與優化 三、關鍵參數解析3.1 OpenCV中的HoughCircles參數3.2 參數調優策略 四、Python與OpenCV實現參考4.1 基本實現代碼4.2 改進…

記錄一次修改nacos安全問題導致服務調用出現404

1、nacos默認值修改 nacos.core.auth.plugin.nacos.token.secret.key**** nacos.core.auth.server.identity.key******** nacos.core.auth.server.identity.value************ 重啟nacos, 這時候微服務的token認證會立即失效,等待自動重連認證或者手動重啟服務 2、…

Python面試總結

hello,大家好,我是potato,我總結一下最近的面試遇到的問題~ 1.Python開發(軟通動力) 自我介紹主要問了項目(YOLOv11)項目遇到的難點和解決方法is,列表和元組的區別Python多線程有什么問題?Pyt…

5.18 day24

知識點回顧: 元組可迭代對象os模塊 作業:對自己電腦的不同文件夾利用今天學到的知識操作下,理解下os路徑。 元組 元組的特點: 有序,可以重復,這一點和列表一樣 元組中的元素不能修改,這一點…