代碼隨想錄算法訓練營Day46 | 139.單詞拆分、多重背包(卡碼網56.攜帶礦石資源)

139.單詞拆分

可以理解為一道 完全背包 + 排列 的題,dp數組定義和遞推公式部分腦子需要轉個彎

1、DP數組定義:一維滾動數組vector<bool>。dp[j]表示字符串s的[0, j]子串是否能夠匹配。

2、DP數組初始化:dp[0]初始化為true,其余元素初始化為false,題目中沒有對dp[0]做出限制,將其設置為true是由于遞推公式需求。

3、遞推公式:本題與其說是遞推公式,不如將其理解為“如果前面部分已經符合了,再看看當前是否還能符合”。

4、遍歷順序:按 完全背包 + 排列 的順序遍歷

bool wordBreak(string s, vector<string>& wordDict) {// dp[j]表示字符串s的[0, j]子串是否能夠匹配vector<bool> dp(s.size() + 1, false);// 空字符串初始化為truedp[0] = true;for (int j = 0; j <= s.size(); ++j) {for (int i = 0; i < wordDict.size(); ++i) {int l = wordDict[i].size();// 條件1:長度足夠// 條件2:前 j - l 個字符能夠匹配(前面都不能匹配那當前也沒有匹配的必要)// 條件3:前 j 還沒匹配(匹配好了就沒有修改的必要了)if (j - l >= 0 && dp[j - l] && !dp[j]) { dp[j] = true;// 逐個匹配字符,如果全部匹配則將dp[j]設置為truefor (int k = 0; k < l; ++k) {if (s[j - l + k] != wordDict[i][k]) {dp[j] = false;break;}}}}}return dp[s.size()];
}

?多重背包(卡碼網56.攜帶礦石資源)

多重背包能夠當成0-1背包來理解

多重背包中,每個物品都有其使用次數限制。假設物品 i 能使用 nums[i] 次,將物品 i 拆成 nums[i] 個物品,問題就轉換為了0-1背包問題

寫起來時整體就是0-1背包多加一次遍歷nums[i]的循環,但這層循環具體加在哪里是會有不小的性能差異的:

最直觀的寫法:直接插在遍歷 i 之后,相當于把物品i全部拆開一個個遍歷。這樣寫容易超時:

// 第一行包含兩個整數 C 和 N,分別表示宇航艙的容量和礦石的種類數量。 
// 接下來的三行,每行包含 N 個正整數。具體如下:
// 第二行包含 N 個整數,表示 N 種礦石的重量。
// 第三行包含 N 個整數,表示 N 種礦石的價格。
// 第四行包含 N 個整數,表示 N 種礦石的可用數量上限。
// 輸出一個整數,代表獲取的最大價值。
int bag(int begWeight, int n, vector<int> value, vector<int> weight, vector<int> nums) {vector<int> dp(begWeight + 1, 0);for (int i = 0; i < n; ++i) {// 把物品i全都散開一個個加for (int k = 0; k < nums[i]; ++k) {for (int j = begWeight; j >= weight[i]; --j) {dp[j] = std::max(dp[j], dp[j - weight[i]] + value[i]);}}}return dp[begWeight];
}

更好的寫法:將這層循環插在最內層,判斷如果加入物品i,是加1個、2個還是更多個

int bag(int begWeight, int n, vector<int> value, vector<int> weight, vector<int> nums) {vector<int> dp(begWeight + 1, 0);for (int i = 0; i < n; ++i) {for (int j = begWeight; j >= weight[i]; --j) {// 判斷物品i是加1個、2個、還是3個……for (int k = 1; k <= nums[i] && (j - k * weight[i]) >= 0; ++k) {dp[j] = std::max(dp[j], dp[j - k * weight[i]] + k * value[i]);}}}return dp[begWeight];
}

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

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

相關文章

Multi-Head Attention詳解

文中大部分內容以及圖片來自&#xff1a;https://medium.com/hunter-j-phillips/multi-head-attention-7924371d477a 當使用 multi-head attention 時&#xff0c;通常d_key d_value &#xff08;d_model / n_heads&#xff09;&#xff0c;其中n_heads是頭的數量。研究人員稱…

01-Vue2 介紹與指令的使用

1. Vue核心 1.1. Vue簡介 1.1.1. 官網 中文官網Vue.js - 漸進式 JavaScript 框架 | Vue.js (vuejs.org)https://cn.vuejs.org/ 英文官網Vue.js - The Progressive JavaScript Framework | Vue.js (vuejs.org)https://vuejs.org/ 1.1.2. 介紹與描述 VUE是構建于用戶界面的漸進…

靶機滲透之sar

Name: Sar: 1Date release: 15 Feb 2020Author: LoveSeries: Sar Download: https://drive.google.com/open?id1AFAmM21AwiAEiVFUA0cSr_GeAYaxd3lQ 對于vulnhub中的靶機&#xff0c;我們都需先下載鏡像&#xff0c;然后導入VM&#xff0c;并將網絡連接改為NAT模式。首先我們…

UDP數據報套接字編程入門

目錄 1.TCP和UDP的特點及區別 1.1TCP的特點 1.2UDP的特點 1.3區別 2.UDP Socket的api的介紹 2.1DatagramSocket API 2.2DatagramPacket API 3.回顯客戶端與服務器 3.1回顯服務器 3.1.1UdpEchoServer類的創建 3.1.2服務器的運行方法start() 3.1.3main部分 3.1.4.完整…

C# CAD PaletteSet.Style各種外觀和行為樣式

ps.Style 是 Autodesk.AutoCAD.Windows.PaletteSet 類的一個屬性&#xff0c;用于定義調色板集&#xff08;PaletteSet&#xff09;的各種外觀和行為樣式。它可以是 PaletteSetStyles 枚舉類型的組合值 PaletteSetStyles 枚舉中包含以下一些選項&#xff1a; NameEditable&am…

統計子矩陣

一、題目描述 P8783 [藍橋杯 2022 省 B] 統計子矩陣 二、算法簡析 2.1 二維前綴和 我們知道&#xff0c;只要確定了矩陣的左上頂點和右下頂點&#xff0c;一個矩陣就被固定了。因此&#xff0c;我們可以遍歷這兩個頂點&#xff0c;達到遍歷所有子矩陣的目的&#xff0c;復雜…

AutoSAR(基礎入門篇)12.5-Dem

目錄 一、Dem簡介 二、Dem消抖 1、計數模式 1. 普通增減計數 2. 反向歸零增減模式

在微服務整合dubbo,以為微服務版的若依為例

在微服務整合dubbo&#xff0c;以為微服務版的若依為例 一、環境二、整合過程1、父模塊依賴2、生產者3、消費者 三、修改若依的服務調用方式為dubbo1、改造系統模塊2、改造認證授權中心 四、整合過程遇到的問題1、出現循環引用2、出現依賴沖突3、啟動出現端口號被占用4、出現某…

UVa11726 Crime Scene

題目鏈接 UVa11726 - Crime Scene 題意 給定n&#xff08;n≤100&#xff09;個物體&#xff0c;每個物體都是一個圓或者k&#xff08;k≤10&#xff09;邊形&#xff0c;用長度盡量小的繩子把它們包圍起來。 分析 孟加拉國Manzurur Rahman Khan (Sidky)大神出的難題&#xff…

MySQL 核心模塊揭秘 | 07 期 | 二階段提交 (1) prepare 階段

二階段提交的 prepare 階段&#xff0c;binlog 和 InnoDB 各自會有哪些動作&#xff1f; 本文基于 MySQL 8.0.32 源碼&#xff0c;存儲引擎為 InnoDB。 1. 二階段提交 二階段提交&#xff0c;顧名思義&#xff0c;包含兩個階段&#xff0c;它們是&#xff1a; prepare 階段。…

springboot-基礎-eclipse配置+helloword示例

備份筆記。所有代碼都是2019年測試通過的&#xff0c;如有問題請自行搜索解決&#xff01; 下一篇&#xff1a;springboot-基礎-添加model和controller的簡單例子常用注解含義 目錄 配置helloword示例新建項目創建文件 配置 spring boot官方有定制版eclipse&#xff0c;也就是…

BUUCTF AWD-Test1

打開靶場是這個有些簡陋的界面。 隨便點點&#xff0c;找到這個東西。 看到ThinkPHP&#xff0c;思路瞬間清晰&#xff0c;老熟人了。這個就是ThinkPHP漏洞。根據版本我們去找一下poc。 /index.php/?sIndex/\think\View/display&content%22%3C?%3E%3C?php%20phpinfo();…

SHELL 腳本: 導出NEO4j DUMP并上傳SFTP

前提 開通sftp賬號 安裝expect 示例 NEO4J_HOME/path/to/neo4j # neo4j 安裝目錄 DUMP_PATH/data/dump # DUMP本地保存目錄 DUMP_FILEneo4j_$(date %F).dump #導出文件名稱 UPLOAD_DIR/path/to/stfp/dump/ #上傳目錄 $NEO4J_HOME/bin/neo4j-admin dump --databaseneo4j --t…

Vue-5

Vue 3 的優勢 更容易維護&#xff08;組合式API&#xff09;更快的速度更小的體積更優的數據響應 創建 Vue 3 項目 前提環境條件&#xff1a;已安裝 16.0 或更高版本的 Node.js node -v創建一個 Vue 應用&#xff08;下面的指令將會安裝并執行 create-vue &#xff09; np…

服務端向客戶端推送數據的實現方案

在日常的開發中&#xff0c;我們經常能碰見服務端需要主動推送給客戶端數據的業務場景&#xff0c;比如數據大屏的實時數據&#xff0c;比如消息中心的未讀消息&#xff0c;比如聊天功能等等。 本文主要介紹SSE的使用場景和如何使用SSE。 服務端向客戶端推送數據的實現方案有哪…

MySQL 自增列解析(Auto_increment)

MySQL數據庫為列提供了一種自增屬性&#xff0c;當列被定義為自增時。Insert語句對該列即使不提供值&#xff0c;MySQL也會自動為該列生成遞增的唯一標識&#xff0c;因此這個特性廣泛用于主鍵的自動生成。 一、自增列的用法 自增列具有自動生成序列值&#xff0c;整型&#…

職責鏈模式(Chain of Responsibility Pattern)

定義 職責鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;是一種行為設計模式&#xff0c;它允許對象接收請求并將其沿著處理者鏈傳遞&#xff0c;直到有一個處理者處理它為止。職責鏈模式通過將請求的處理邏輯分布 在職責鏈模式中&#xff0c;通常包含以下幾…

MYSQL04高級_邏輯架構剖析、查詢緩存、解析器、優化器、執行器、存儲引擎

文章目錄 ①. 邏輯架構剖析②. 服務層 - 查詢緩存③. 服務層 - 解析器④. 服務層 - 優化器⑤. 服務層 - 執行器⑥. MySQL8執行原理 ①. 邏輯架構剖析 ①. 服務器處理客戶端請求 ②. 連接層 系統(客戶端)訪問MySQL服務器前,做的第一件事就是建立TCP連接經過三次握手建立連接成…

Linux使用C語言實現通過互斥鎖限制對共享資源的訪問

互斥鎖限制共享資源的訪問 主線程中有兩個線程&#xff0c;分別輸出信息。 #include <stdio.h> #include <pthread.h> #include <unistd.h>int g_data0;void* fun1(void *arg) {printf("t1&#xff1a;%ld thread is create\n", (unsigned long)…

大宋咨詢數據研究在汽車新品上市中的核心作用

隨著汽車行業的快速變革&#xff0c;數據研究已經成為新品上市流程中的不可或缺的一環。從市場定位、產品規劃到營銷策略&#xff0c;數據研究不僅為汽車企業提供了獨特的洞察&#xff0c;還為其提供了決策依據&#xff0c;確保新品在競爭激烈的市場中取得優勢。在這一領域&…