《靈珠覺醒:從零到算法金仙的C++修煉》卷三·天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP)

《靈珠覺醒:從零到算法金仙的C++修煉》卷三·天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP)

哪吒在數據修仙界中繼續他的修煉之旅。這一次,他來到了一片神秘的混元谷,谷中有一座巨大的混元金斗,斗身閃爍著神秘的光芒。谷口有一塊巨大的石碑,上面刻著一行文字:“欲破此谷,需以混元金斗之力,裝萬物,二維DP顯真身。”

哪吒定睛一看,石碑上還有一行小字:“物品列表[[2, 3], [3, 4], [4, 5]](重量,價值),背包容量為5,最大價值為7。”哪吒心中一動,他知道這是一道關于0-1背包問題的難題,需要通過二維動態規劃的方法,在不超出背包容量的前提下,找到能裝入背包的最大價值物品組合。

暴力解法:混元金斗的初次嘗試

哪吒心想:“要解決0-1背包問題,我可以嘗試所有可能的物品組合。”他催動混元金斗之力,通過遞歸的方式,枚舉所有可能的物品組合,計算每種組合的總價值和總重量,記錄最大價值。

int knapsack(vector<vector<int>>& items, int capacity) {return knapsackHelper(items, capacity, 0);
}int knapsackHelper(vector<vector<int>>& items, int capacity, int index) {if (index >= items.size() || capacity <= 0) return 0;int value = knapsackHelper(items, capacity, index + 1); // 不選當前物品if (capacity >= items[index][0]) { // 選當前物品value = max(value, items[index][1] + knapsackHelper(items, capacity - items[index][0], index + 1));}return value;
}

哪吒成功地計算了最大價值,但混元金斗的光芒卻黯淡了下來。他意識到,這種方法雖然可行,但時間復雜度極高,尤其是當物品數量很多時,靈力消耗巨大。

C++語法點

在C++中,二維動態規劃是解決0-1背包問題的常用方法。以下是一些重要特性:

  • 二維數組

    • 使用vector<vector<int>>表示動態規劃表。
    • 常用操作:
      • dp[i][j]:訪問第i個物品、容量為j時的最大價值。
      • 初始化二維數組:vector<vector<int>> dp(n + 1, vector<int>(capacity + 1, 0))
  • 動態規劃

    • 通過狀態轉移方程dp[i][j] = max(dp[i-1][j], dp[i-1][j - weight] + value)計算當前狀態的最大價值。

高階優化:二維DP的智慧

哪吒元神中突然浮現金色銘文——「混元金斗裝萬物,二維DP顯真身」。他意識到,可以通過二維動態規劃的方法,優化0-1背包問題的解決過程。

哪吒決定使用二維動態規劃,創建一個二維數組dp,其中dp[i][j]表示前i個物品在容量為j時的最大價值。通過狀態轉移方程,他成功地計算了最大價值,而且靈力消耗大幅減少。

int knapsack(vector<vector<int>>& items, int capacity) {int n = items.size();vector<vector<int>> 

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

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

相關文章

網絡爬蟲【簡介】

我叫補三補四&#xff0c;很高興見到大家&#xff0c;歡迎一起學習交流和進步 今天來講一講視圖 一、網絡爬蟲的定義 網絡爬蟲&#xff08;Web Crawler&#xff09;&#xff0c;又稱為網絡蜘蛛、網絡機器人等&#xff0c;是一種按照一定規則自動抓取互聯網信息的程序或腳本。它…

?AI時代到來,對電商來說是效率躍升,還是溫水煮青蛙

?凌晨三點的義烏商貿城&#xff0c;95后創業者小王&#xff0c;靜靜地盯著屏幕上的AI工具&#xff0c;竟露出了笑容。這個月他的跨境玩具店銷量提升了不少&#xff0c;從之前的狀態翻了3倍&#xff1b;而且團隊人數有所變化&#xff0c;從5人縮減到了2人&#xff08;其中包括他…

PDF文件密碼保護破解:安全解密的步驟與技巧

PDF文件加密后&#xff0c;需要特定的密碼才能訪問內容。以下是一些常見的方法來解密PDF文件&#xff1a; 方法一&#xff1a;使用Adobe Acrobat 如果你有Adobe Acrobat Pro&#xff0c;可以使用它來解密PDF文件。 打開Adobe Acrobat Pro&#xff1a; 啟動Adobe Acrobat Pro…

qt 自帶虛擬鍵盤的編譯使用記錄

一、windows 下編譯 使用vs 命令窗口&#xff0c;分別執行&#xff1a; qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先沒有 指定需要使用的輸入法語言就進行過編譯&#xff0c;則需要先 執行 nmake distclean 清理后執行 qmake 才能生效。 …

Java開發之數據庫應用:記一次醫療系統數據庫遷移引發的異常:從MySQL到PostgreSQL的“dual“表陷阱與突圍之路

記一次醫療系統數據庫遷移引發的異常&#xff1a;從MySQL到PostgreSQL的"dual"表陷阱與突圍之路 一、驚魂時刻&#xff1a;數據庫切換引發的系統雪崩 某醫療影像系統在進行國產化改造過程中&#xff0c;將原MySQL數據庫遷移至PostgreSQL。遷移完成后&#xff0c;系…

C++刷題(二):棧 + 隊列

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及刷題記錄&#xff0c;使用語言為C。 每道題我會給出LeetCode上的題號&#xff08;如果有題號&#xff09;&#xff0c;題目&#xff0c;以及最后通過的代碼。沒有題號的題目大多來自牛客網。對于題目的…

精通游戲測試筆記(持續更新)

第一章、游戲測試的兩條規則 不要恐慌 不要將這次發布當作最后一次發布 不要相信任何人 把每次發布當作最后一次發布 第二章&#xff1a;成為一名游戲測試工程師

Windows功能之FTP服務器搭建

一、創作背景 之前有用linux系統搭建過ftp服務器&#xff0c;最近想著用windows系統也順便搭建一個&#xff0c;看網上有第三方服務軟件一鍵部署&#xff0c;記得windows可以不借助第三方軟件就可以搭建&#xff0c;就想順便操作試試&#xff0c;結果老是連接不上&#xff0c;費…

星型組網模塊的兩種交互方式優缺點解析

星型組網模塊簡介 星型組網模塊工作在433MHz頻段&#xff1b;星型組網模塊集主機&#xff08;協調器&#xff09;、終端為一體&#xff0c;星型組網模塊具有長距離、高速率兩種傳輸模式&#xff0c;一個主機&#xff08;協調器&#xff09;支持多達200個節點與其通訊&#xff0…

二分+前綴和——森林的最大美麗值

森林的最大美麗值(二分差分數組) 題目分析 求最小值的最大值&#xff0c;聯想到二分。 第一階段二段性分析 對于所有樹的高度都可以大于等于mid&#xff0c;那么我們可以確定高度小于mid的值一定也可以&#xff0c;但是此時我需要找的是最大的高度&#xff0c;那么mid一定比…

Pytorch實現之最小二乘梯度歸一化設計

簡介 簡介:LSGAN提出了一種利用最小二乘法來計算兩個數據分布之間的距離,該論文在此基礎上采用梯度歸一化來進一步穩定訓練。 論文題目:LSN-GAN: A Novel Least Square Gradient Normalization for Generative Adversarial Networks(LSN-GAN:一種新的生成對抗網絡的最小…

JavaScript基礎-全局作用域

在JavaScript編程中&#xff0c;理解變量的作用域是編寫高效、可維護代碼的關鍵之一。全局作用域是指變量在整個程序范圍內都可訪問的狀態&#xff0c;這意味著它們可以在任何函數或代碼塊中被讀取和修改。然而&#xff0c;過度使用全局變量也可能導致一些問題&#xff0c;如命…

【2025.3.13】記一次雙系統筆記本加裝固態硬盤記錄 linux擴容 linux更換/home和/opt所在硬盤 windows無法調整亮度

文章目錄 &#x1f315;事情經過&#x1f315;更換/home和/opt的掛載硬盤&#x1f319;目的&#x1f319;初始化1t固態硬盤&#x1f319;打開Linux查看硬盤信息&#x1f319;給新1t固態硬盤分區&#x1f319;格式化分區&#x1f319;把新1t固態硬盤先掛載到/mnt/ssd_1t 用于后續…

山東省新一代信息技術創新應用大賽-計算機網絡管理賽項(樣題)

目錄 競賽試題 網絡拓撲 配置需求 虛擬局域網 IPv4地址部署 OSPF及路由部署 配置合適的靜態路由組網 MSTP及VRRP鏈路聚合部署 IPSEC部署 路由選路部署 設備與網絡管理部署 1.R1 2.R2 3.S1 4.S2 5.S3 競賽試題 本競賽使用HCL(華三云實驗室)來進行網絡設備選擇…

【測試語言基礎篇】Python基礎之List列表

一、Python 列表(List) 序列是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置&#xff0c;或索引&#xff0c;第一個索引是0&#xff0c;第二個索引是1&#xff0c;依此類推。 Python有6個序列的內置類型&#xff0c;但最常見的是列表和元組。序列都可…

大數據面試之路 (二) hive小文件合并優化方法

大量小文件容易在文件存儲端造成瓶頸&#xff0c;影響處理效率。對此&#xff0c;您可以通過合并Map和Reduce的結果文件來處理。 一、合并小文件的常見場景 寫入時產生小文件&#xff1a;Reduce任務過多或數據量過小&#xff0c;導致每個任務輸出一個小文件。 動態分區插入&…

MySQL 批量插入 vs 逐條插

MySQL 插入數據&#xff1a;批量插入 vs 逐條插入&#xff0c;哪個更快&#xff1f; 在 MySQL 中&#xff0c;插入數據有兩種常見方式&#xff1a; 批量插入&#xff1a;一條 SQL 插入多條數據。逐條插入&#xff1a;每次插入一條數據。 這兩種方式有什么區別&#xff1f;哪…

Docker基礎命令說明

Docker基礎操作命令眾多&#xff0c;這些命令可以按如下方式進行分類&#xff1a; 鏡像操作容器操作網絡操作數據卷操作LOG查詢 等方面進行分類。 一、鏡像操作命令 docker images&#xff1a;用于列出本地系統中所有的 Docker 鏡像。鏡像就像是一個模板&#xff0c;它包含…

AI重構私域增長:從流量收割到終身價值運營的三階躍遷

私域運營的AI進化論&#xff1a;內容即服務的三個階段 隨著企業微信生態的成熟&#xff0c;私域運營正經歷從"流量收割"到"關系養成"的本質轉變。在AIGC技術的推動下&#xff0c;2024年私域場景正式進入**"內容即服務"**的價值共創期&#xff1…

Linux date 命令使用指南

date 命令用于 顯示或設置系統日期和時間&#xff0c;支持靈活的時間格式化和計算。以下是常用場景與詳細示例&#xff1a; 一、基本用法 1. 顯示當前日期和時間 <BASH> date # 輸出&#xff1a;Thu Jun 13 14:25:36 CST 20242. 設置系統時間&#xff08;需root權限&am…