代碼隨想錄算法訓練營第四十三天【動態規劃part05】 | 1049. 最后一塊石頭的重量 II、494. 目標和、474.一和零

1049. 最后一塊石頭的重量 II

題目鏈接:

力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺

求解思路:

等于把石頭盡量分成重量相同的兩堆

動規五部曲

  1. 確定dp數組及其下標含義:容量為j的背包,最多能裝下的最大重量為dp[j]
  2. 確定遞推公式:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
  3. dp數組的初始化:重量不會是負數,全部初始化為0即可
  4. 確定遍歷順序:先物品,再背包,且遍歷背包要倒序
  5. 舉例推導dp數組:以[2,4,1,1]為例,如圖。最后相撞后的結果為sum-2*dp[target]

代碼:

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for (int i : stones) sum += i;int target = sum / 2;vector<int> dp(target+1, 0);for (int i = 0; i < stones.size(); i++){for (int j = target; j >= stones[i]; j--){dp[j] = max(dp[j], dp[j-stones[i]] + stones[i]);}}return sum - 2*dp[target];}
};

494. 目標和

題目鏈接:

力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺

求解思路:

等于求有多少種不同的組合方式,能組合成和為left的子集(裝滿這個背包有幾種方法)

動規五部曲

  1. dp數組及其下標含義:填滿j(包括j)這么大容積的包,有dp[j]種方法
  2. 確定遞推公式:dp[j] += dp[j - nums[i]],舉例說明如下,湊整dp[5]的方法就是把所有的dp[j - nums[i]]累加
    • 已經有一個1(nums[i]) 的話,有 dp[4]種方法 湊成 容量為5的背包。
    • 已經有一個2(nums[i]) 的話,有 dp[3]種方法 湊成 容量為5的背包。
    • 已經有一個3(nums[i]) 的話,有 dp[2]中方法 湊成 容量為5的背包
    • 已經有一個4(nums[i]) 的話,有 dp[1]中方法 湊成 容量為5的背包
    • 已經有一個5 (nums[i])的話,有 dp[0]中方法 湊成 容量為5的背包
  3. 初始化:dp[0] = 1,dp[0]是遞推結果的起源
  4. 遍歷順序:先物品,再背包,背包要倒序
  5. 舉例推導dp數組:nums: [1, 1, 1, 1, 1],target = 3,此時bagSize = 4,如圖

代碼:

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for (int i : nums) sum += i;// 兩種特殊情況if (abs(target) > sum) return 0;if ((target + sum) % 2 == 1) return 0;int bagSize = (target + sum) / 2;// 填滿j(包括j)這么大容積的包,有dp[j]種方法vector<int> dp(bagSize+1, 0);// 初始化dp[0] = 1;for (int i = 0; i < nums.size(); i++){for (int j = bagSize; j >= nums[i]; j--){dp[j] += dp[j-nums[i]];}}return dp[bagSize];}
};

474.一和零

題目鏈接:

力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺

求解思路:

動規五部曲

  1. 確定dp數組及其下標含義:最多有i個0和j個1的strs的最大子集的大小為dp[i][j]
  2. 遞推公式:dp[i][j] 可以由前一個strs里的字符串推導出來,strs里的字符串有zeroNum個0,oneNum個1,則 dp[i][j] = dp[i - zeroNum][j - oneNum] + 1,注意和dp[i][j]本身比較,取較大的值;字符串的zeroNum和oneNum相當于物品的重量(weight[i]),字符串本身的個數相當于物品的價值(value[i]),即01背包問題,不過重量有兩個維度
  3. 初始化:物品價值不會為負數,因此全部初始化為0
  4. 遍歷順序:先物品,后背包,背包倒序;注意物品是strs里的字符串,背包是題目中的m和n
  5. 舉例推導:以 ["10","0001","111001","1","0"],m = 3,n = 3為例,如圖

代碼:

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {// 初始化vector<vector<int>> dp(m+1, vector<int> (n+1, 0));for (string str : strs){ // 遍歷物品int one = 0, zero = 0;for (char c : str){if (c == '0') zero ++;else one++;}// 遍歷背包(倒序遍歷)for (int i = m; i >= zero; i--){for (int j = n; j >= one; j--){dp[i][j] = max(dp[i][j], dp[i-zero][j-one] + 1);}}}return dp[m][n];}
};

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

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

相關文章

logstash安裝和使用

官網&#xff1a;https://www.elastic.co/cn/logstash/ 1.上傳Linux安裝包 2.解壓安裝包且重命名 [rootVM-4-10-centos logstash]# tar -zxvf logstash-8.11.1-linux-x86_64.tar.gz -C ../software/[rootVM-4-10-centos logstash]# mv logstash-8.11.1/ logstash3.啟動測試 …

國產遙感影像處理軟件 GSRS,真是很方便

兼容國內外絕大多數衛星遙感影像格式&#xff1b;高效的影像查看&#xff0c;比如漫游、放大、縮小、查看影像像素灰度值、影像地理坐標、影像投影坐標系等等&#xff1b;人機交互影像裁剪&#xff0c;任何繪制裁剪區域&#xff0c;輸出裁剪影像&#xff1b;具備影像基本處理功…

基于Haclon的Blob分析

任務要求&#xff1a; 請用BLOB分析的方法計算圖中所有灰度值在120和255之間的像素構成的8連通區域的面積與中心點坐標。 Blob基礎&#xff1a; 分析過程&#xff1a;首先獲取圖像&#xff0c;然后根據特征對原始圖像進行閾值分割&#xff08;區分背景像素和前景像素&#xf…

洛谷 P4552 [Poetize6] IncDec Sequence

挺好的一道思維題。 分析 因為是對區間修改&#xff0c;多次修改肯定會超時&#xff0c;很容易想到差分。 那么原題的對區間修改就可以轉換為下面三個操作&#xff08;均在差分數組中&#xff09;&#xff1a; 1. 任選一個數1 2. 任選一個數-1 3. 任選兩個數1和-1 進一步考…

貪心算法及相關例題

目錄 什么是貪心算法&#xff1f; leetcode455題.分發餅干 leetcode376題.擺動序列 leetcode55題.跳躍游戲I leetcode45題.跳躍游戲II leetcode621題.任務調度器 leetcode435題.無重疊空間 leetcode135題.分發糖果 什么是貪心算法&#xff1f; 貪心算法更多的是一種思…

《QT從基礎到進階·三十七》QWidget實現左側導航欄效果

NavigationBarPlugin插件類實現了對左側導航欄的管理&#xff0c;我們可以在導航欄插件中添加界面&#xff0c;并用鼠標點擊導航欄能夠切換對應的界面。 源碼在文章末尾 實現效果如下&#xff1a; NavigationBarPlugin實現的接口如下&#xff1a; class NAVIGATIONBAR_EXP…

【brpc學習實踐六】backup request場景案例

應用場景 有時為了保證可用性,需要同時訪問兩路服務,哪個先返回就取哪個。在brpc中,這有多種做法,根據server是否掛在同一個命名服務內有所區別。 當后端server可以掛在一個命名服務內時 Channel開啟backup request。這個Channel會先向其中一個server發送請求,如果在Ch…

C#,數值計算——插值和外推,多項式插值與外推插值(Poly_interp)的計算方法與源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 多項式插值與外推插值 /// Polynomial Interpolation and /// Extrapolation interpolation routines for one dimension /// </summary> public class Poly…

【ES6.0】- Promise對象

【ES6.0】- Promise對象 文章目錄 【ES6.0】- Promise對象一、概述二、Promise狀態三、Promise方法3.1 Promise.prototype.then方法&#xff1a;鏈式操作3.2 Promise.prototype.catch方法&#xff1a;捕捉錯誤3.3 Promise.race方法&#xff1a;捕捉錯誤3.4 Promise.any()3.5 Pr…

第三節-Android10.0 Binder通信原理(三)-ServiceManager篇

1、概述 在Android中&#xff0c;系統提供的服務被包裝成一個個系統級service&#xff0c;這些service往往會在設備啟動之時添加進Android系統&#xff0c;當某個應用想要調用系統某個服務的功能時&#xff0c;往往是向系統發出請求&#xff0c;調用該服務的外部接口。在上一節…

廣告機/商業顯示屏_基于MT878安卓主板方案

安卓主板在廣告機領域扮演著重要的角色。無論是在商場、車站、酒店、電梯、機場還是高鐵站&#xff0c;LED廣告機廣泛應用&#xff0c;并通過不同方式進行播放和管理。 廣告機/商業顯示屏_基于MT878安卓主板方案 基于MT8788安卓主板方案的廣告機采用了聯發科MT8788八核芯片方案…

對比兩個數組中對應位置的兩個元素將每次對比的最大值用于構成新的數組np.maximum()

【小白從小學Python、C、Java】 【計算機等考500強證書考研】 【Python-數據分析】 對比兩個數組中對應位置的兩個元素 將每次對比的最大值用于構成新的數組 np.maximum() 選擇題 以下代碼的輸出結果為&#xff1f; import numpy as np a1 [1,2,33] a2 [11,2,3] print("…

Axios 默認配置 簡化URL 簡化代碼 多臺服務器接口配置

main.js配置 import Axios from axios Axios.defaults.method GET//設置默認的請求類型 Axios.defaults.baseURL https://apis.jxcxin.cn/api//設置接口地址 Axios.defaults.params { token: abc } //每次請求都帶上這個參數 Axios.defaults.timeout 5000 //請求的超時時間…

MATLAB - text的兩種使用方法

text小技巧 1. 常規使用&#xff08;Method 1&#xff09;2. 在顯示畫面的相對位置&#xff08;Method 2&#xff09;3. 舉個例子 1. 常規使用&#xff08;Method 1&#xff09; text(x,y,txt)2. 在顯示畫面的相對位置&#xff08;Method 2&#xff09; text(string,‘ABC’,…

使用websocket獲取thingsboard設備的實時數據

背景 有一個讀者前來咨詢,如何實時獲取設備的遙測數據。 其實tb是有提供websocket接口來獲取設備數據的。而且還支持js跨域調用。下面給大家演示一下。 websocket地址 完整代碼 <!DOCTYPE HTML> <html><h

HTTP協議和WebSocket協議之間的區別

HTTP協議和WebSocket協議之間的主要區別在于它們的設計目的和通信方式。 HTTP協議是一種無狀態的協議&#xff0c;它的主要設計目的是用于從Web服務器傳輸超文本到本地瀏覽器的傳輸協議。HTTP協議使用請求和響應模型&#xff0c;客戶端向服務器發送請求&#xff0c;服務器返回…

【Java并發編程十二】線程池

線程池 用來統一地管理線程&#xff0c;避免線程的重復創建與銷毀。使用線程池可以讓執行完的線程回到線程池&#xff0c;等待下一次調用。 import jdk.jshell.EvalException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import j…

Matplotlib顏色條的配置_Python數據分析與可視化

Matplotlib顏色條配置 基本顏色顏色條選擇配色方案顏色條刻度的限制與擴展功能的設置離散型顏色條 基本顏色 Matplotlib提供了8種指定顏色的方法&#xff1a; 在[0&#xff0c;1]中的浮點值的RGB或RGBA元組&#xff08;例如 (0.1, 0.2, 0.5) 或&#xff08;0.1&#xff0c; 0.…

C語言中文網 - Shell腳本 - 9

第1章 Shell基礎(開胃菜) 9. Shell修改命令提示符 Shell 通過PS1和PS2這兩個環境變量來控制提示符的格式,修改PS1和PS2的值就能修改命令提示符的格式。 PS1 控制最外層的命令提示符格式。 PS2 控制第二層的命令提示符格式。 在修改 PS1 和 PS2 之前,我們先用 echo 命令輸出…

contos7中mongodb數據庫無法備份與還原,數據庫工具的安裝

由于之前數據庫沒有卸載干凈&#xff0c;導致直接用sudo yum install -y mongodb-org-tools命令無法直接安裝&#xff0c;只能選擇手動安裝了。 先去官網找到mongo-tool工具 MongoDB Database Tools Downloads | MongoDB 然后復制要下載的版本的地址。 然后直接用wget來下載 …