完全背包問題中「排列數」與「組合數」的核心區別

🎯 一句話理解

  • 求組合數(不計順序) → 外層遍歷物品,內層遍歷背包容量

  • 求排列數(計順序) → 外層遍歷背包容量,內層遍歷物品


🎲 舉例說明

假設有硬幣 [1, 2, 3],目標金額是 4,要求湊成的方法數:

1. 組合數(順序無關):

比如:[1, 2, 1][2, 1, 1][1, 1, 2] 視為同一種方案,因為它們元素一樣,只是順序不同。

for i := 0; i < len(nums); i++ {       // 物品在外層for j := nums[i]; j <= target; j++ { // 容量在內層dp[j] += dp[j - nums[i]]}
}

這種寫法只會把每組物品組合一次,不考慮排列方式。


2. 排列數(順序有關):

比如:[1, 2, 1][2, 1, 1][1, 1, 2] 視為3種不同方案

for j := 0; j <= target; j++ {       // 容量在外層for i := 0; i < len(nums); i++ { // 物品在內層if j >= nums[i] {dp[j] += dp[j - nums[i]]}}
}

這樣每次容量增加時,都會把所有可放的物品都考慮一遍 ? 排列自然產生了。


? 總結對比

目標外層循環內層循環特點
組合數(無序)遍歷物品 i遍歷容量 j順序不會重復
排列數(有序)遍歷容量 j遍歷物品 i會計算所有順序

🧠 記憶口訣

🎯 組合外層物品,排列外層背包。

詳細解釋?組合外層物品,排列外層背包

🎯 問題背景

我們有硬幣 coins = [1, 2, 3],目標是金額 4。我們想知道有多少種方案湊出金額 4:


🧮 什么是組合數(不計順序)?

  • 組合數不區分順序:[1,1,2][2,1,1][1,2,1] 是同一種組合。

  • 所以我們只想知道「有哪些組合方式」,不在意順序。


? 為什么組合數要先遍歷物品?

我們看以下代碼:

dp := make([]int, target+1)
dp[0] = 1
for i := 0; i < len(coins); i++ {       // 外層:物品(硬幣)for j := coins[i]; j <= target; j++ { // 內層:背包容量dp[j] += dp[j - coins[i]]}
}

🌱 核心思想:

每次選一個硬幣coins[i],我們更新所有能放它的位置,但每個 dp[j] 只會累加來自當前物品之前的組合。

這樣做的結果是:

  • 所有組合只計算一次,避免了順序重復。


?? 舉個例子

第一層循環:i = 0(coin = 1)

更新 dp[1], dp[2], dp[3], dp[4],只用 1 元硬幣。

此時:

dp = [1 1 1 1 1]

表示只用 1 元可以組成的方法數,只有一種 [1,1,1,1]


第二層循環:i = 1(coin = 2)

我們再用 2 元更新,但只能在原有的基礎上增加。

  • dp[2] += dp[0] → [2]

  • dp[3] += dp[1] → [1,2]

  • dp[4] += dp[2] → [2,2]

更新后:

dp = [1 1 2 2 3]

說明方法數是:[1,1,1,1], [1,1,2], [2,2], 不會重復 [2,1,1][1,2,1] 等順序。


📦 如果調換循環順序會怎樣?

比如改為這樣:

for j := 0; j <= target; j++ {for i := 0; i < len(coins); i++ {if j >= coins[i] {dp[j] += dp[j - coins[i]]}}
}

這時每個 j 都會嘗試所有硬幣,所以:

  • dp[3] 會通過 [1,2],也會通過 [2,1],兩次都被算入。

  • 所以是排列數(考慮順序)。


🔁 總結

目標外層循環結果特性會不會重復順序
組合數物品在外不計順序不會
排列數背包在外順序不同都算

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

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

相關文章

NHANES指標推薦:MDS

文章題目&#xff1a;The association between magnesium depletion score (MDS) and overactive bladder (OAB) among the U.S. population DOI&#xff1a;10.1186/s41043-025-00846-x 中文標題&#xff1a;美國人群鎂耗竭評分 &#xff08;MDS&#xff09; 與膀胱過度活動癥…

C++:字符串操作函數

strcpy() 功能&#xff1a;把一個字符串復制到另一個字符串。 #include <iostream> #include <cstring> using namespace std;int main() {char src[] "Hello";char dest[10];strcpy(dest, src);cout << "Copied string: " << …

1基·2臺·3空間·6主體——藍象智聯解碼可信數據空間的“數智密碼”

近日&#xff0c;由全國數據標準化技術委員會編制的《可信數據空間 技術架構》技術文件正式發布&#xff0c;標志著我國數據要素流通體系向標準化、規范化邁出關鍵一步。該文件從技術功能、業務流程、安全要求三大維度對可信數據空間進行系統性規范&#xff0c;為地方、行業及企…

基于TI AM6442+FPGA解決方案,支持6網口,4路CAN,8個串口

TI AM6442FPGA解決方案具有以下技術優勢及適用領域&#xff1a; 一、技術優勢 ?異構多核架構?&#xff1a;AM6442處理器集成7個內核&#xff08;2xCortex-A534xCortex-R5F1xCortex-M4F&#xff09;&#xff0c;可實現應用處理、實時控制和獨立任務分核協同&#xff0c;滿足…

android vlc播放rtsp

最近在做IOT開發&#xff0c;需要把IOT設備的RTSP流在手機端播放&#xff0c;VLC是個不錯的選擇&#xff0c;使用起來簡單方便。 1、在AndroidManifest.xml 中添加網絡權限 <uses-permission android:name"android.permission.INTERNET"/> <uses-permissi…

前端面經 9 JS中的繼承

借用Class實現繼承 實現繼承 extends super extends 繼承父類 super調用父類的構造函數 子類中存在方法采取就近原則 &#xff0c;子類構造函數需要使用super()調用父類的構造函數 JS 靜態屬性和私有屬性 寄生組合式繼承

jQuery知識框架

一、jQuery 基礎 核心概念 $ 或 jQuery&#xff1a;全局函數&#xff0c;用于選擇元素或創建DOM對象。 鏈式調用&#xff1a;多數方法返回jQuery對象&#xff0c;支持連續操作。 文檔就緒事件&#xff1a; $(document).ready(function() { /* 代碼 */ }); // 簡寫 $(function…

【HCIA】BFD

前言 前面我們介紹了浮動路由以及出口路由器的默認路由配置&#xff0c;可如此配置會存在隱患&#xff0c;就是出口路由器直連的網絡設備并不是運營商的路由器&#xff0c;而是交換機。此時我們就需要感知路由器的存活狀態&#xff0c;這就需要用到 BFD&#xff08;Bidirectio…

前端流行框架Vue3教程:18. _組件數據傳遞

透傳 Attributes 透傳attribute指的是傳遞給一個組件&#xff0c;卻沒有被該組件聲明為props或emits的attribute或者v-on事件監聽器。最常見的例子就是class、style和id 當一個組件以單個元素為根作渲染時&#xff0c;透傳的attribute會自動被添加到根元素上 透傳 Attributes …

卓力達電鑄鎳網:精密制造與跨領域應用的創新典范

目錄 引言 一、電鑄鎳網的技術原理與核心特性 二、電鑄鎳網的跨領域應用 三、南通卓力達電鑄鎳網的核心優勢 四、未來技術展望 引言 電鑄鎳網作為一種兼具高精度與高性能的金屬網狀材料&#xff0c;通過電化學沉積工藝實現復雜結構的精密成型&#xff0c;已成為航空航天、電…

1.2.3.2 數據安全發展歷程-大數據安全產品領域

從電商到物流&#xff1a;中國大數據安全產品如何進化&#xff1f; 在數字化時代&#xff0c;我們的一舉一動都可能被記錄——購物記錄、聊天信息、位置軌跡……這些數據不僅關系到個人隱私&#xff0c;更涉及企業運營和國家安全的命脈。近年來&#xff0c;隨著數據的爆發式增長…

服務器性能參數分析基礎:磁盤-CPU-內存

在Linux系統中&#xff0c;"掛載"&#xff08;Mount&#xff09;是指將物理存儲設備&#xff08;如磁盤分區&#xff09;或邏輯存儲卷&#xff08;如LVM、網絡存儲&#xff09;關聯到文件系統目錄樹的特定路徑節點&#xff08;即掛載點&#xff09;&#xff0c;使得該…

密碼學刷題小記錄

base 64 打開后發現是一串字符串&#xff0c;&#xff0c;我們直接進行base64解密即可 Caesar 根據標題分析&#xff0c;我們知道這是凱撒解密&#xff0c;拖進去經過嘗試在偏移量為12時直接得解&#xff08;這道題就是找偏移量比較麻煩&#xff09; Morse 這道題打開后&am…

Spring框架(三)

目錄 一、JDBC模板技術概述 1.1 什么是JDBC模板 二、JdbcTemplate使用實戰 2.1 基礎使用&#xff08;手動創建對象&#xff09; 2.2 使用Spring管理模板類 2.3 使用開源連接池&#xff08;Druid&#xff09; 三、模擬轉賬開發 3.1 基礎實現 3.1.1 Service層 3.1.2 Da…

[計算機網絡]網絡層

文章目錄 408考研大綱IPV4數據報格式協議: IPv4 地址DHCP協議IP組播 408考研大綱 IPV4數據報格式 協議: 1:ICMP 6:TCP 17:UDP IPv4 地址 特殊IP 網絡號全1又稱直接廣播地址&#xff0c;32位全1又稱受限廣播地址 因為255.255.255.255只能在本網絡內廣播&#xff0c;路由器不…

影樓精修-膚色統一算法解析

注意&#xff1a;本文樣例圖片為了避免侵權&#xff0c;均使用AIGC生成&#xff1b; 本文介紹影樓精修中膚色統一算法的實現方案&#xff0c;并以像素蛋糕為例&#xff0c;進行分析說明。 膚色統一就是將人像照片中皮膚區域的顏色進行統一&#xff0c;看起來顏色均勻一致&…

計算機網絡:什么是計算機網絡?它的定義和組成是什么?

計算機網絡是指通過通信設備和傳輸介質&#xff0c;將分布在不同地理位置的計算機、終端設備及其他網絡設備連接起來&#xff0c;實現資源共享、數據傳輸和協同工作的系統。其核心目標是使設備之間能夠高效、可靠地交換信息。 關鍵組成部分 硬件設備 終端設備&#xff1a;如計算…

深度學習---獲取模型中間層輸出的意義

一、什么是 Hook&#xff08;鉤子函數&#xff09;&#xff1f; 在 PyTorch 中&#xff0c;Hook 是一種機制&#xff0c;允許我們在模型的前向傳播或反向傳播過程中&#xff0c;插入自定義的函數&#xff0c;用來觀察或修改中間數據。 最常用的 hook 是 forward hook&#xf…

存儲器上如何存儲1和0

在計算機存儲器中&#xff0c;數據最終以**二進制形式&#xff08;0和1&#xff09;**存儲&#xff0c;這是由硬件特性和電子電路的物理特性決定的。以下是具體存儲方式的詳細解析&#xff1a; 一、存儲的物理基礎&#xff1a;半導體電路與電平信號 計算機存儲器&#xff08;…

Qt中的RCC

Qt資源系統(Qt resource system)是一種獨立于平臺的機制&#xff0c;用于在應用程序中傳輸資源文件。如果你的應用程序始終需要一組特定的文件(例如圖標、翻譯文件和圖片)&#xff0c;并且你不想使用特定于系統的方式來打包和定位這些資源&#xff0c;則可以使用Qt資源系統。 最…