動態規劃之背包問題:組合優化中的經典NP挑戰

背包問題概念:

背包問題是一種經典的組合優化的NP問題,在計算機科學、運籌學等領域有著廣泛的應用。

問題可以簡單的描述為:

假設有一個容量為C的背包和n個物品,每個物品i都有重量w[i]和價值v[i]。目標是選擇一些物品放入背包,使得放入背包的物品總價值最大,同時背包中物品的總重量不能超過背包的容量。

?

?這里先簡單介紹兩種背包問題:

1.01背包:也就是你物品的個數是1個,你拿了就剩0個,沒拿就剩1個

2.完全背包:物品個數無數個,可以拿0/1/2/3/4至無窮多個

背包也可以分兩種:1.背包不需要裝滿。2.背包必須裝滿

這樣兩兩組合就有4種問題

其實背包問題還有很多種情況,個數有2/3/4/5等等,每個在X2(不必裝滿||必須裝滿)

這里重在了解01背包和完全背包問題(其他可能更多出現在競賽中)

01背包問題是所有問題的基礎(基本上所有的背包問題都衍生于01背包)

以牛客網例題為例(leetcode沒有較好的入門例題)

題目解析:?

第1小問:背包不必裝滿問題

第2小問:背包必裝滿問題

建議畫一個表格,而且最好上面標號,就有點像我們之間處理初始化那里一樣,多加一行多加一列,有利于我們后面填表

算法原理 :

其實這里的背包問題就是一個線性dp問題,也就是你挑物品時可以從左往右依次選還是不選

類似于我們之前講解線性dp問題一樣去分析即可

1.狀態表示:經驗+題目要求

經驗:以i位置為結尾巴拉巴拉

題目要求:dp[i]:表示以i位置為結尾(從前i個物品中)所有的選法中價值最大的

我們可以發現這個狀態表示推導不出來狀態轉移方程,因為我們在考慮第i個物品的時候,需要考慮這個能不能放進背包,我連總的重量和剩余容量都不知道

所以我們需要改一下狀態表示,既然一維表示不了,那我們就二維

dp[i][j]:從前i個物品挑選,總體積不超過j,所有選法中,能挑選出來的最大價值

為什么這里是不超過?因為我們做第一小問,問題是不需要裝滿

2.狀態轉移方程:以最近的一步狀況,劃分情況

1.不選i物品,不選的話是不是最大價值就在i-1前,回歸我們的狀態表示

dp[i-1][j]:從前i-1個物品挑選,總體積不超過j,所有選法中,能挑選出來的最大價值?

那這種選法中dp[i][j]=dp[i-1][j]

2.選i物品,選的時候是不是要考慮能不能裝進背包,所以我們需要判斷背包剩余容量

剩余容量就是j-v[i]

如果剩余容量小于0,那這個i物品肯定是不能選的

如果剩余容量大于等于0,這個i物品就可以選,怎么選,回歸狀態表示

是不是你自身的價值加上i-1的最大價值

所以綜上,最大價值就是這兩種選法中最大的那個

第2小問講解:

這里只需要稍加修改一下狀態表示即可

原: dp[i][j]:從前i個物品挑選,總體積不超過j,所有選法中,能挑選出來的最大價值

現:dp[i][j]:從前i個物品挑選,總體積正好等于j,所有選法中,能挑選出來的最大價值

基本是一樣的,但我們需要特別注意:我們用dp[i][j]=-1,表示沒有這種情況,就是所有的選法無法湊到剛好總體積等于j的情況

那為什么不等于0呢?因為如果等于0,我們就無法區分dp[i][j]=0時表示什么情況,我們之前做第一問的時候就有初始化為0,為了區分這兩種情況,我們把湊不出總體積為j的情況設為-1

第一種情況不選i物品,可以不用判斷dp[i-1][j]!=-1,因為我不選i物品,dp[i-1][j]都等于-1,那證明你湊不出來,那dp[i][j]也湊不出來,所以這時候的dp[i][j]=dp[i-1][j];

第二種情況,選i物品,就必須要判斷dp[i-1][j-v[i]]?:也就是你必須要判斷你前面的必須要湊出來j-v[i]的體積,因為你dp[i][j]這個位置選i物品要加體積v[i]的,所以你前面要能湊出來,這時候在加上v[i]的體積就剛剛好

初始化:明確第一行第一列表示啥,第一行我從0個物品中選還是不選湊出體積為0/1/2/3

第一列我選不選0/1/2/3/4物品,湊0體積,那就說明都不選,價值就是0,為了方便,我們只要創建dp表的時候初始化第一行為-1即可

后面的都和第一小問一模一樣了

?

優化 :

第一種方法:滾動數組的方法,我們可以發現我們的狀態轉移方程僅僅需要兩行的數組

也就是我們在填這一行的數據時,僅僅需要上一行的數據

例如我們在填寫第一行數據時,僅僅需要第0行的數據,那我們填第2行時,就可以把第0行滾動下來充當第2行

?

如果你還覺得兩行數組很麻煩,當然也可以用一行數組,

但需要注意你的填表順序要從右往左

如果你是左往右,你填表的時候需要借助左上角的值,那左往右就是覆蓋,填右邊的時候就出錯

這里運用的原理就是覆蓋,你的數組原來是有數據的,也就是上一行的數據,你填這一行時就可以用到這個數據,注意填表從右往左就行(因為你只有一行數組)?

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

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

相關文章

vue3: pdf.js5.2.133 using typescript

npm install pdfjs-dist5.2.133 項目結構&#xff1a; <!--* creater: geovindu* since: 2025-05-09 21:56:20* LastAuthor: geovindu* lastTime: 2025-05-09 22:12:17* 文件相對于項目的路徑: \jsstudy\vuepdfpreview\comonents\pdfjs.vue* message: geovindu* IDE: vscod…

H2Database SQL 插入流程

H2Database SQL 插入流程 插入數據時會先進行 SQL 解析,然后找到插入表對應的 Primary Index 對應的 BTree,然后根據二分法定位到插入的葉子節點,將 key(主鍵) 和 value(Row) 插入到指定的葉子節點. 解析 SQL session 加鎖 創建 savepoint獲取or創建事務 設置 savepoint 執行…

虛擬機ubantu20.04系統橋接模式下無法ping通外網,但可以ping通本機的解決方案

1.出現的問題&#xff1a; 虛擬機ubantu20.04系統橋接模式下無法ping通外網,但可以ping通本機。 2.解決方案&#xff1a; 如果 DHCP 未分配 IP 地址&#xff0c;可以手動配置靜態 IP&#xff1a; 1.編輯網絡配置文件&#xff1a; sudo nano /etc/netplan/01-netcfg.yaml 修…

面對渠道競爭,品牌該如何應對?

無論是傳統零售渠道還是電商平臺的&#xff0c;渠道競爭仍舊是品牌維持和擴大影響力繞不開的一環。品牌想要保證自身的市場地位和盈利能力&#xff0c;就需要充分發揮各方面的優勢&#xff0c;來應對多變的市場環境。 一、改變產品定位 在存量市場上&#xff0c;消費者本身擁有…

SpringAI特性

一、SpringAI 顧問&#xff08;Advisors&#xff09; Spring AI 使用 Advisors機制來增強 AI 的能力&#xff0c;可以理解為一系列可插拔的攔截器&#xff0c;在調用 AI 前和調用 AI 后可以執行一些額外的操作&#xff0c;比如&#xff1a; 前置增強&#xff1a;調用 AI 前改…

101alpha_第6個

第6個alpha (-1 * correlation(open, volume, 10)) 這個就是看這兩個相似性。10天之內的 如果結果為正且數值較大&#xff0c;投資者可能會認為在開盤價上漲時成交量萎縮&#xff0c;市場上漲動力不足&#xff0c;可能是賣出信號&#xff1b;反之&#xff0c;開盤價下跌時成交…

【滲透測試】Web服務程序解析漏洞原理、利用方式、防范措施

文章目錄 Web服務程序解析漏洞原理、利用方式、防范措施一、原理**1. 定義與觸發條件****2. 攻擊鏈流程圖** 二、利用方式**1. 常見漏洞類型與利用手法**(1) IIS 5.x-6.x解析漏洞(2) Apache解析漏洞(3) Nginx解析漏洞(4) IIS 7.x解析漏洞(5) PHP CGI解析漏洞&#xff08;CVE-20…

SSL證書格式詳解:PEM、CER、DER、JKS、PKCS12等

引言 在網絡安全領域&#xff0c;SSL/TLS證書是保障互聯網通信安全的核心工具。它們通過加密連接&#xff0c;確保服務器與客戶端之間的數據隱私和完整性。然而&#xff0c;對于初學者來說&#xff0c;SSL證書的多種格式——PEM、CER、JKS、PKCS12、PFX等——常常令人困惑。每…

生信服務器如何安裝cellranger|生信服務器安裝軟件|單細胞測序軟件安裝

一.Why cellranger Cell Ranger 是由 10x Genomics 公司開發的一款用于處理其單細胞測序&#xff08;single-cell RNA-seq, scRNA-seq&#xff09;數據的軟件套件。它主要用于將原始測序數據&#xff08;fastq 文件&#xff09;轉換為可以用于下游分析的格式&#xff0c;比如基…

Redis 常見數據類型

Redis 常見數據類型 一、基本全局命令詳解與實操 1. KEYS 命令 功能&#xff1a;按模式匹配返回所有符合條件的鍵&#xff08;生產環境慎用&#xff0c;可能導致阻塞&#xff09;。 語法&#xff1a; KEYS pattern 模式規則&#xff1a; h?llo&#xff1a;匹配 hello, ha…

33號遠征隊 - 游玩鑒賞

風景很好畫質很好 , 圖片太大只能截圖一小部分 地編和特效 值得參考

使用JMETER中的JSON提取器實現接口關聯

一、JSON提取器介紹 JSON提取器是JMETER工具中用于從JSON響應中提取數據的重要組件&#xff0c;常常用于接口關聯場景中&#xff08;參數傳遞&#xff09;。 二、添加JSON提取器 舉例&#xff08;積分支付接口請求數據依賴于創建訂單接口響應的payOrderId&#xff09; 1.在…

QT6(35)4.8定時器QTimer 與QElapsedTimer:理論,例題的界面搭建,與功能的代碼實現。

&#xff08;112&#xff09; &#xff08;113&#xff09;模仿隨書老師給的源代碼搭建的&#xff0c; LCD 顯示的部分不一樣 &#xff1a; &#xff08;114&#xff09;以下開始代碼完善&#xff1a; 關聯定時器的信號與槽函數 &#xff1a; &#xff08;115&#xff09;…

nvidia-smi 和 nvcc -V 作用分別是什么?

命令1&#xff1a;nvidia-smi 可以查看當前顯卡的驅動版本&#xff0c;以及該驅動支持的CUDA版本。 命令2&#xff1a;nvcc -V 可以看到實際安裝的CUDA工具包版本為 12.8 更詳細的介紹&#xff0c;可以參考如下鏈接

Excel 數據 可視化 + 自動化!Excel 對比軟件

各位Excel小能手們&#xff01;你們有沒有過要對比兩個Excel表格數據差異&#xff0c;卻看得眼睛都花了的經歷&#xff1f;其實啊&#xff0c;現在有專門的Excel文件比較軟件能幫咱解決這大難題。這軟件就是用來快速找出兩個或多個Excel表格數據不同之處&#xff0c;還能把修改…

《軟件項目經濟性論證報告模板:全面解析與策略建議》

《軟件項目經濟性論證報告模板:全面解析與策略建議》 一、引言 1.1 項目背景闡述 在數字化浪潮席卷全球的當下,各行業對軟件的依賴程度日益加深。[行業名稱] 行業也不例外,隨著業務規模的不斷擴張、業務復雜度的持續提升以及市場競爭的愈發激烈,對高效、智能、定制化軟件…

高頻工業RFID讀寫器-三格電子

高頻工業RFID讀寫器 型號&#xff1a;SG-HF40-485、SG-HF40-TCP 產品功能 高頻工業讀寫器&#xff08;RFID&#xff09;產品用在自動化生產線,自動化分揀系統,零部件組裝產線等情境下&#xff0c;在自動化節點的工位上部署RFID讀寫設備&#xff0c;通過與制品的交互&#xf…

2025年5月計劃(linux+Gpu精粹催眠+UE獨立游戲)

終于步入正軌了&#xff0c;4月份為了各種面試&#xff0c;一會學這&#xff0c;一會學那。 現在&#xff0c;有大量的業余時間了&#xff0c;也該干點正事了。 按照規劃&#xff0c; 1&#xff0c;ue獨立游戲&#xff08;十分鐘的視頻即可&#xff09; 2&#xff0c;linux-&…

計算機學習路線與編程語言選擇(信息差)

——授人以魚不如授人以漁 計算機學習公式&#xff1a;1/3科班思維 1/3路線選擇 1/3工程能力 好工作隨便找&#xff08;來自B站小毛毛熊&#xff09; 本文主要是路線選擇&#xff01;&#xff01;&#xff01;下面開始吧。 面向崗位學習&#xff01;到招聘網站看看有哪些…

『Python學習筆記』ubuntu解決matplotlit中文亂碼的問題!

ubuntu解決matplotlit中文亂碼的問題&#xff01; 文章目錄 simhei.ttf字體下載鏈接&#xff1a;http://xiazaiziti.com/210356.html將字體放到合適的地方 sudo cp SimHei.ttf /usr/share/fonts/(base) zkfzkf:~$ fc-list | grep -i "SimHei" /usr/local/share/font…