代碼隨想錄day37 動態規劃(3)

416. 分割等和子集 - 力扣(LeetCode)?

解1:二維dp數組,時間O(m*n),空間O(m*n),m、n為dp數組的行和列數。

判斷原數組總和能否整除2;

將target設為total // 2(若是total / 2,target為float,需要轉為int才能以target為維度新建dp數組);

* 新建dp,行數 = nums長度,列數 = target+1,i行j列dp[i][j]表示從子數組nums[0:i+1](第0~第i個數)不重復地取數,能夠獲得的不超過j的最大總和。dp[len(nums)-1][target]若等于target,說明在整個nums中能夠不重復地取出總和恰好為target的數,返回true。

* 考慮dp[i][j]的計算:若當前數nums[i] > j,說明i不可加入,于是dp[i][j] = dp[i-1][j]。否則,i可能加入,獲得總和 = dp[i-1][j-nums[i]] + nums[i](將加入了i數的背包想象成兩部分,一部分是i數本身,價值和重量都為i,另一部分不含i而且重量上限為j-nums[i],dp[i-1][j-nums[i]]就是第二部分能取到的最大價值);i也可以選擇不加入,獲得總和 =?dp[i-1][j]。用i加入/不加入中的較大者更新dp[i][j]。

由此可見,需要通過dp[i][j]左側及上側的值計算它。遍歷時從左到右,從上到下。

* base情況,考慮左、上邊緣的值:1)dp[x][0]表示總和上限=0,因此dp[x][j]=0(dp本來都初始化為0,不需處理);2)dp[0][x]表示只考慮nums第0個數,則當x小于nums[0],初始為0,當x不小于nums[0],都初始化為nums[0]。

遍歷每行、每列,直到右下角。

class Solution:def canPartition(self, nums: List[int]) -> bool:if len(nums) <= 1:return Falsetotal = sum(nums)if total % 2 != 0:return Falsetarget = total // 2#dp[i][j]:從nums的[0, i]中取數,能獲得的不超過j的最大總和.dp: len(nums) * (target+1)dp = [[0 for _ in range(target+1)] for _ in range(len(nums))]#轉移:dp[i][j] = max(dp[i-1][j], dp[i][j-nums[i]]+nums[i])#base:不超過0的最大總和:只能不取任何數,dp[x][0] = 0, #      只考慮第0個數時:dp[0][x] = nums[0] if x >= nums[0] else = 0for x in range(nums[0], target+1):dp[0][x] = nums[0]for j in range(1, target+1):#最大和=jfor i in range(1, len(nums)):#取0~i個數if nums[i] > j:dp[i][j] = dp[i-1][j]else:dp[i][j] = max(dp[i-1][j], dp[i-1][j-nums[i]]+nums[i])return dp[-1][-1] == target

解2:壓縮為一維dp數組,時間O(m*n),空間O(n)

將物品/nums[i]維度壓縮掉了,dp是長度=target+1的一維數組,按nums[0]的情況初始化dp。由于新的dp[j]需要參考“上一行左側”或“上一行正上方”的值,應該從后往前遍歷dp,防止上一行的值在使用之前被新的值覆蓋。若當前數nums[i]超過當前上限j,不改變dp[j]的值(相等于沿用上一行正上方的值);否則,用當前值dp[j]與dp[j-nums[i]] + nums[i]的較大者更新當前值。

class Solution:def canPartition(self, nums: List[int]) -> bool:if len(nums) <= 1:return Falsetotal = sum(nums)if total % 2 != 0:return Falsetarget = total // 2dp = [0 for _ in range(target+1)]for i in range(1, target+1):if nums[0] <= i:dp[i] = nums[0]for i in range(1, len(nums)):for j in range(target, 0, -1):if nums[i] <= j:dp[j] = max(dp[j], dp[j-nums[i]] + nums[i])return dp[-1] == target

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

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

相關文章

遇到的異步問題

事例1&#xff1a; app.post("/predictfunc") async def predictfunc(item: Item):# 使用asyncio.to_thread()在單獨的線程中運行predict_in_threadresult await asyncio.to_thread(predictfunc_main, item)return result 事例2&#xff1a; app.post("/remo…

PCL從理解到應用【02】PCL環境安裝 | PCL測試| Linux系統

前言 本文介紹在Ubuntu18.04系統中&#xff0c;如何安裝PCL。 源碼安裝方式&#xff1a;pcl版本1.91&#xff0c;vtk版本8.2.0&#xff0c;Ubuntu版本18.04。 安裝好后&#xff0c;可以看到pcl的庫&#xff0c;在/usr/lib/中&#xff1b; 通過編寫C代碼&#xff0c;直接調用…

華為路由器靜態路由配置(eNSP模擬實驗)

實驗目標 如圖下所示&#xff0c;讓PC1ping通PC2 具體操作 配置PC設備ip 先配置PC1的ip、掩碼、網關。PC2也做這樣的配置 配置路由器ip 配置G0/0/0的ip信息 #進入系統 <Huawei>system-view #進入GigabitEthernet0/0/0接口 [Huawei]int G0/0/0 #設置接口的ip和掩碼 […

【UE5.3】筆記7 控制Pawn移動

使用A、D鍵控制角色左右移動 打開我們的BP_Player藍圖類&#xff0c;選擇事件圖表&#xff0c;添加我們的控制事件 右鍵&#xff0c;搜索A keyboard&#xff0c;選擇A,如下圖&#xff0c;D也是 添加扭矩力 首先我們要把我們的player上的模擬物理選項打開&#xff0c;這樣我們…

ChatGPT在Java后端開發中的應用與影響

隨著人工智能技術的發展&#xff0c;尤其是OpenAI推出的聊天機器人模型ChatGPT&#xff0c;其強大的自然語言理解和生成能力正在改變著我們的生活和工作方式。在Java后端開發領域&#xff0c;ChatGPT同樣有著廣泛的應用前景&#xff0c;并且能夠為Java后端開發者帶來諸多好處。…

Caused by: java.io.IOException: Broken pipe

IO異常&#xff1a;管道破裂。 推薦文章&#xff1a;解決java.io.IOException: Broken pipe的報錯

JavaFx基礎知識

1.Stage 舞臺 如此這樣的一個框框&#xff0c;舞臺只是這個框框&#xff0c;并不管里面的內容 public void start(Stage primaryStage) throws Exception {primaryStage.setScene(new Scene(new Group()));primaryStage.getIcons().add(new Image("/icon/img.png"))…

【不銹鋼酸退作業區退火爐用高溫輻射計快速安裝】

項目名稱 不銹鋼酸退作業區退火爐用高溫輻射計快速安裝 改造實施項目簡介項目提出前狀況:不銹鋼生產過程中,各種型號的不銹鋼帶鋼在退火工藝中對帶鋼溫度的準確性要求很高,帶鋼溫度的檢測直接影響帶鋼的產品質量,不銹鋼帶鋼溫度測量依靠的是高溫輻射計,其測量的準確性、穩…

【Python機器學習】算法鏈與管道——通用的管道接口

Pipeline類補單可以用于預處理和分類&#xff0c;實際上還可以將任意數量的估計器連接在一起。例如&#xff0c;我們可以構建一個包含特征提取、特征選擇、縮放和分類的管道&#xff0c;總共有4個步驟。同樣的&#xff0c;最后一步可以用聚類或回歸代替。 對于管道中估計器的唯…

@Validated 根據字段的值不同,動態分組校驗

GroupSequenceProvider 配置 作用域只在單個對象的字段里 Data GroupSequenceProvider(value TestProvider.class) public class TestRO {NotNull(message "不能為空",groups ValidatedRemark.A.class)Pattern(regexp "2|3|",message "只能為2,…

vue2使用use注冊自定義指令實現權限控制

版本環境 vue的版本是^2.6.12&#xff0c;將會使用到Vue.use()、Vue.directive() 適用環境 頁面某些按鈕&#xff0c;需要受到當前登錄用戶的“角色”“權限”的影響&#xff0c;通過store獲取角色role和權限permission&#xff0c;通過自定義指令的方式&#xff0c;控制某一…

antd DatePicker日期選擇框限制最多選擇一年

實現效果 實現邏輯 import React, { useState } from react;const ParentComponent () > {const [dates, setDates] useState(null);const disabledDate (current) > {if (!dates) {return false;}const tooLate dates[0] && current.diff(dates[0], days) &…

Appium自動化測試框架1

電腦的瀏覽器 手機的瀏覽器 手機上的app 原生的應用 純java 手機上的app apk 移動網頁應用 純HTML CSS 手機的瀏覽器上 電腦的瀏覽器上 混合應用 java html css python代碼 Appium python庫 Appium 手機 都是代表本機 0.0.0.0 127.0.0.1 localhost 如何啟動app 啟動參…

土壤養分化驗儀:農業生態與可持續發展

隨著現代農業技術的不斷進步&#xff0c;土壤養分化驗儀在農業生產中扮演著越來越重要的角色。這款高科技設備以其高精度、高效率的特點&#xff0c;為農業生態與可持續發展提供了強有力的支撐。 一、農田土壤監測與管理 農田是土壤養分化驗儀最主要的應用場所。通過對農田土壤…

【AI】DeepStream(14):圖像分割deepstream-segmentation-test示例演示

【AI】AI學習目錄匯總 1、簡介 deepstream-segmentation-test示例演示了圖像的語義分割。兩個配置文件,分別加載U-Net和Res-UNet兩種分割模型 unet_output_graph.uffunetres18_v4_pruned0.65_800_data.uffU-Net是一個在生物醫學圖像分割領域廣泛應用的卷積神經網絡(CNN),…

集團型企業組織架構復雜,業務線多,如何進行高效費用管控?

企業管理中流行這樣一句話&#xff1a;“企業轉型&#xff0c;財務先行”。對集團型企業而言&#xff0c;當今的發展形勢下&#xff0c;通過財務戰略全面轉型、最終撬動企業價值提升&#xff0c;是一件難而正確的事情。 集團企業具有經營規模大、產業鏈多、分支機構多、地域跨度…

地下電子標識器探測儀ED8000選型注意事項

ED8000探測儀是一臺集成了多頻率、多種ID標識器調制模式、高低靈敏度調節、可讀寫標識器等全功能、高性能電子標識器探測儀。它有著極高的靈敏度,同時具備良好的噪聲抑制能力&#xff0c;不僅適合專業測繪人員&#xff0c;普通操作人員也可以輕松掌握。 ED8000可支持模擬電子標…

洛谷 P1042 [NOIP2003 普及組] 乒乓球

洛谷 P1042 [NOIP2003 普及組] 乒乓球 題目背景 國際乒聯現在主席沙拉拉自從上任以來就立志于推行一系列改革&#xff0c;以推動乒乓球運動在全球的普及。其中 11 11 11 分制改革引起了很大的爭議&#xff0c;有一部分球員因為無法適應新規則只能選擇退役。華華就是其中一位…

2024亞洲國際餐飲展覽會(北京餐飲展|火鍋展|預制菜展會)

2024北京餐飲展會&#xff0c;2024北京食材展會&#xff0c;2024北京火鍋展會&#xff0c;2024北京火鍋食材展會&#xff0c;2024北京預制菜展會&#xff0c;2024北京預制食材展會&#xff0c; 2024亞洲國際餐飲展覽會&#xff08;北京餐飲展|火鍋展|預制菜展會&#xff09; …

【C語言】刷題筆記 Day2

【筆記】 【1】局部變量不初始化&#xff0c;默認放的隨機值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】這里雖然輸入的是一個浮點數&#xff0c;但是只取整數部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多組輸入&#xff0c;保存和不保存…