「動態規劃」如何求最小路徑和?

64. 最小路徑和icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-path-sum/description/

給定一個包含非負整數的m x n網格grid,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明:每次只能向下或者向右移動一步。

  1. 輸入:grid = [[1,3,1],[1,5,1],[4,2,1]],輸出:7,解釋:因為路徑1→3→1→1→1的總和最小。
  2. 輸入:grid = [[1,2,3],[4,5,6]],輸出:12。

提示:m == grid.length,n == grid[i].length;1 <= m, n <= 200,0 <= grid[i][j] <= 200。


我們用動態規劃的思想來解決這個問題。

確定狀態表示:根據經驗和題目要求,我們用dp[i][j]表示:到達[i, j]位置處,最小路徑和是多少

推導狀態轉移方程:要想到達[i, j]位置,只有2種情況:

  • 先到達[i - 1, j]位置,再向下走一步,到達[i, j]位置。此時的最小路徑和就等于,到達[i - 1, j]位置的最小路徑和加上網格中[i, j]位置的值,即dp[i - 1][j] + grid[i][j]。
  • 先到達[i, j - 1]位置,再向右走一步,到達[i, j]位置。此時的最小路徑和就等于,到達[i, j - 1]位置的最小路徑和加上網格中[i, j]位置的值,即dp[i][j - 1] + grid[i][j]。

到達[i, j]位置的最小路徑和,應該等于這兩種情況的較小值,即dp[i][j] = min(dp[i - 1][j] + grid[i][j], dp[i][j - 1] + grid[i][j]) = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]

初始化:觀察狀態轉移方程,我們發現,在計算dp表最上面一行和最左邊一列的值時,會出現越界訪問,所以我們要對其初始化。這里我們用增加輔助結點的方式來初始化。我們在dp表的最上面和最左邊分別加上一行一列輔助結點。接著,我們要考慮,如何初始化輔助結點,才能確保后續的填表是正確的。我們先把此時的dp表畫出來:

* * * *
* ? ? ?
* ?

不難意識到,左上角的?位置的值就應該是網格左上角的值。再根據狀態轉移方程,我們只需要讓min(dp[i - 1][j], dp[i][j - 1])這一項等于0,就能符合預期。所以,我們只需要讓左上角的?位置,它的上面和左邊2個*位置的值初始化為0即可。

* 0 * *
0 ? ? ?
* ?

接下來考慮除了左上角的?位置之外,其他的?位置的值。為了讓這些?位置的值符合預期,我們就要讓min(dp[i - 1][j], dp[i][j - 1])這一項中,*位置的值不影響結果。所以,我們要把這些*都初始化為+∞。由于并沒有導致溢出風險的運算,用INT_MAX代表+∞即可。

綜上所述:我們要在dp表的最上面和最左邊分別加上一行一列輔助結點,并且把[0, 1]位置和[1, 0]位置初始化為0,其余輔助結點初始化為INT_MAX

填表順序:根據狀態轉移方程,dp[i][j]依賴于dp[i - 1][j]和dp[i][j - 1]這2項,所以應從上往下,從左往右填表

返回值:根據狀態表示,顯然應返回dp表右下角的值,即dp[m][n],對應到達網格右下角的最小路徑和。

細節問題:由于新增了一行一列輔助結點,所以dp表的規模比網格的規模大一行一列,即dp表的規模為(m + 1) x (n + 1)。由于添加了輔助結點,要時刻注意下標的映射關系,dp表的[i, j]位置對應網格的[i - 1, j - 1]位置

時間復雜度:O(m x n),空間復雜度:O(m x n)。

class Solution {
public:int minPathSum(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size();// 創建dp表vector<vector<int>> dp(m + 1, vector<int>(n + 1, INT_MAX));// 初始化dp[0][1] = dp[1][0] = 0;// 填表for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];}}// 返回結果return dp[m][n];}
};

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

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

相關文章

《嵌入式系統導論》

計算題 已知位帶別名基地址為0x220000000,計算位于位帶區的0x200FFFFF地址的數據位7,計算它對應的位帶別名區地址。 別名地址=位帶別名基地址+字節偏移量x32+位號x4 別名地址=0x22000000+(0x200FFFFF -0x20000000)*32+7*4=0x220000807 分析如下基本定時器配置語句。 { ………

ctfshow-web入門-命令執行(web37-web40)

目錄 1、web37 2、web38 3、web39 4、web40 命令執行&#xff0c;需要嚴格的過濾 1、web37 使用 php 偽協議&#xff1a; ?cphp://input post 寫入我們希望執行的 php 代碼&#xff1a; <?php system(tac f*);?> 拿到 flag&#xff1a;ctfshow{5c555d9a-6f55…

Mongodb數組元素更新之使用$定位數組第一個元素

學習mongodb&#xff0c;體會mongodb的每一個使用細節&#xff0c;歡迎閱讀威贊的文章。這是威贊發布的第63篇mongodb技術文章&#xff0c;歡迎瀏覽本專欄威贊發布的其他文章。 閱讀了不少Mongodb的文章&#xff0c;也和同事交流過。Mongodb數組更新是比較難理解的地方&#x…

EXCEL多sheet添加目錄跳轉

EXCEL多sheet添加目錄跳轉 背景 excel中有幾十個sheet&#xff0c;點下方左右切換sheet太耗時&#xff0c;希望可以有根據sheet名超鏈接跳轉相應sheet&#xff0c;處理完后再跳回原sheet。 方案一 新建目錄sheet&#xff0c;在A1寫sheet名&#xff0c;右鍵選擇最下方超鏈接…

問題:材料題請點擊右側查看材料問題 查看材料 #學習方法#經驗分享#學習方法

問題&#xff1a;材料題請點擊右側查看材料問題 查看材料 A.Colleges may reduce their enrollment. B.Top universities become increasingly competitive. C.Universities become selective in student admission. D.Colleges invest less in academy and infrastructure…

Go 文件壓縮解壓

在Go語言中&#xff0c;archive/zip包提供了創建、讀取和解壓縮ZIP格式文件的功能。 一、創建ZIP文件并添加內容----壓縮 package mainimport ("archive/zip""bytes""fmt""io""log""os" )func main() {// 創建一…

el-input中change事件造成的坑

el-input中change事件造成的坑 一、change事件定義二、如果僅回車時候觸發 一、change事件定義 僅在輸入框失去焦點或用戶按下回車時觸發 二、如果僅回車時候觸發 <el-inputv-model.trim"questionInput"placeholder"請輸入你的問題&#xff0c;按回車發送&…

智慧視覺怎么識別視頻?智慧機器視覺是通過什么步驟識別視頻的?

智慧視覺功能怎么識別視頻&#xff1f;智慧視覺是搭載在智能設備比如手機、AI盒子、機器視覺系統上的一個應用程序或特性&#xff0c;采用計算機視覺和人工智能的技術來識別圖像或視頻中的內容。如果想了解視頻識別&#xff0c;就要明白智慧視覺功能會涉及的以下幾個關鍵步驟和…

pxe自動裝機

概念 pxe是c/s模式。允許客戶端通過網絡從遠程服務器&#xff08;服務端&#xff09;下載引導鏡像&#xff0c;加載安裝文件&#xff0c;實現自動化安裝操作系統。 無人值守&#xff1a;安裝選項不需要人為干預&#xff0c;可以自動化實現。 pxe的優點&#xff1a;1.規模化&…

機器人阻抗控制中的機械阻抗模型

機器人阻抗控制中的機械阻抗模型主要涉及到通過修改機器人與環境接觸作業的動力學模型&#xff0c;使其等效為一個期望的阻抗&#xff08;彈簧-質量-阻尼&#xff09;模型。以下是對機械阻抗模型在機器人阻抗控制中的詳細解釋&#xff1a; 阻抗控制原理&#xff1a; 機器人阻抗…

Python——泰坦尼克號數據分析

目錄 ??1.數據集(部分數據) ?? 2、導入數據集與必要模塊 ?? 3.數據預處理 1?? isnull函數查看有無缺失值 2??fillna函數填充缺失值 ?? Age字段使用平均值填充缺失值 ?? Embarked字段填充缺失值 3?? 刪除缺失值較多的字段 ?? 4.數據可視化 1?? di…

流媒體服務器SMS-語音對講(二)

1.簡介 上篇文件介紹了流媒體與設備之間可能的交互場景&#xff0c;本文將介紹客戶端或者web端與攝像頭對講的總體流程。 老規矩&#xff0c;介紹一下本人的開源流媒體&#xff0c;點個star&#xff0c;有興趣一起開發的朋友也可以聯系本人&#xff1a;https://gitee.com/inyem…

PostgreSQL的發布和訂閱功能

發布和訂閱功能在 PostgreSQL 9.0 版本中首次引入,并進一步改進和增強了后續版本中。所以,從 PostgreSQL 9.0 版本開始,就可以使用發布和訂閱功能來實現數據復制和同步 發布和訂閱功能在 PostgreSQL 中提供了一種靈活、可靠的數據復制和同步機制,具有許多優點和一些缺點:…

[數據集][目標檢測]醫療防護服檢測數據集VOC+YOLO格式649張7類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;649 標注數量(xml文件個數)&#xff1a;649 標注數量(txt文件個數)&#xff1a;649 標注類別…

echarts學習: 在圖表中添加多條y軸會怎么樣?

前言 在撰寫如何繪制雙y軸圖表文章時&#xff0c;我突然萌生出了一個想法&#xff0c;如果給圖表添加兩個以上的y軸會怎么樣呢? 帶著這個問題我開始了自己的探索之旅。 我找到了一篇優秀的文章作為參考&#xff0c;雖然它需要付費&#xff0c;但是不要緊&#xff0c;文中免費…

Vulnhub-DC-4

靶機IP:192.168.20.138 kaliIP:192.168.20.128 網絡有問題的可以看下搭建Vulnhub靶機網絡問題(獲取不到IP) 信息收集 nmap掃下端口及版本 dirsearch掃下目錄 沒發現什么敏感信息&#xff0c;看下前端界面 想到會不會存在SQL注入&#xff0c;弱密碼等漏洞。 經過測試SQL注入…

k8s網絡問題以及容器跨宿主機通信原理

【0】資源配置文件 [rootmcwk8s03 mcwtest]# ls mcwdeploy.yaml [rootmcwk8s03 mcwtest]# cat mcwdeploy.yaml apiVersion: apps/v1 kind: Deployment metadata:labels:app: mcwpythonname: mcwtest-deploy spec:replicas: 1selector:matchLabels:app: mcwpythontemplate:met…

Linux進程間通信之管道

進程間通信介紹&#xff1a; 進程間通信的概念&#xff1a; 進程間通信簡稱IPC&#xff08;Interprocess communication&#xff09;&#xff0c;進程間通信就是在不同進程之間傳播或交換信息。 進程間通信的目的&#xff1a; 數據傳輸&#xff1a; 一個進程需要將它的數據…

開源WebGIS全流程常用技術棧

1 數據生產 1.1 uDig uDig&#xff08;http://udig.refractions.net/&#xff09;是一個基于Java開源的桌面應用框架&#xff0c;它構建在Eclipse RCP和GeoTools&#xff08;一個開源的Java GIS包)上。可以進行shp格式地圖文件的編輯和查看&#xff1b;是一個開源空間數據查看…