leadcode的Hot100系列--64. 最小路徑和--權值最小的動態規劃

来源:https://www.cnblogs.com/payapa/archive/2019/07/10/11161337.html
-Advertisement-
Play Games

如果這個: "leadcode的Hot100系列 62. 不同路徑 簡單的動態規劃" 看懂的話,那這題基本上是一樣的, 不同點在於: 1、這裡每條路徑相當於多了一個權值 2、結論不再固定,而是要比較不同走法哪個權值更小 針對第一點,需要把第一行和第一列的權值做一個累加: 假設這裡的權值都是1,則 | ...


如果這個:
leadcode的Hot100系列--62. 不同路徑--簡單的動態規劃

看懂的話,那這題基本上是一樣的,
不同點在於:
1、這裡每條路徑相當於多了一個權值
2、結論不再固定,而是要比較不同走法哪個權值更小

針對第一點,需要把第一行和第一列的權值做一個累加:
假設這裡的權值都是1,則

A B C D
E F G H
I J K L

中,f(A) 為1,f(B) 就為2,,因為A和B各有一個權值,f(C)為3,f(E) 為2,f(I)為3:

1 2 3 4
2 f(F) f(G) f(H)
3 f(J) f(K) f( L)

要想 f(F) 小,則要比較f(B)和f(E)哪個小,所以 f(F) = min( f(F), f(E) ) + 1。
所以很容易得到動態方程:

f [i] [j] = min( f [i] [j-1] + f [i-1] [j] ) + 1 // i 代表行,j 代表列,最後加的1,是假設當前的點的權值是1

所以,每個點記錄的從開始到當前點的最小值。


int min(int a, int b)
{
    return a<b?a:b;
}

int minPathSum(int** grid, int gridSize, int* gridColSize){
    int p[gridSize][*gridColSize];
    int sum = 0, i,j;
    
    for (i=0; i<gridSize; i++)    // 先算出第一列的權值
    {
        sum += grid[i][0];
        p[i][0] = sum;
    }
    sum = 0;
    for (i=0; i<*gridColSize; i++)    // 先算出第一行的權值
    {
        sum += grid[0][i];
        p[0][i] = sum;
    }
    
    for (i=1; i<gridSize; i++)
    {
        for (j=1; j<*gridColSize; j++)
        {
            p[i][j] = min(p[i][j-1], p[i-1][j]) + grid[i][j];    //  動態方程
        }
    }
    return p[gridSize-1][*gridColSize-1];
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分類整理一些內容,方便需要時回過頭來看,整理不易,如有疏漏,請多擔待!之後要查看這篇文章,公眾號後臺回覆 “設計模式聚合” 無靈魂,不模式。 設計模式是什麼鬼(初探) 設計模式是什麼鬼(原型) 設計模式是什麼鬼(單例) 設計模式是什麼鬼(適配器) 設計模式是什麼鬼(策略) 設計模式是什麼鬼(狀態) ...
  • SpringCloud系列教程 | 第九篇:服務網關Zuul初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 前面的文章我們介紹了,Eureka用於服務的註冊於發現,Feign支持服務的調用以及均衡 ...
  • 目前沒有系統學習過 Spring 框架,參與工作時,直接參与到了 Spring Boot 項目的開發。目前還比較菜,所以,你要是和我一樣,不妨也跳過 Spring 框架的學習,直接學習 Sring Boot。 官方文檔 的一段介紹: Spring Boot makes it easy to crea ...
  • 如果你對以下幾個問題有疑問,那麼本文可能會有所幫助。 1.2.3 談協程繞不開線程,按傳統還得從進程談起,不過我想業內人員對進程和線程應該是耳熟能詳,這裡就簡單概括下。 進程擁有自己獨立的堆和棧,既不共用堆,亦不共用棧,進程由操作系統調度;線程擁有自己獨立的棧,共用堆(也可以有自己的私有域),不共用 ...
  • Java 多線程系列文章第 3 篇 這篇文章繼續來嘮嘮概念,講這三兄弟: 串列(Serial) 、 並行(Parallel) 、 併發(Concurrent) 。 吃快餐 出門在外吃飯是一件頭疼的事,用我大學舍友一句話形容:如果不是沒吃飯不能活,他是不會吃飯的。不管學生還是工作者,吃飯都是一件需要揪 ...
  • [TOC] 原文鏈接: "C++屌屌的觀察者模式 同步回調和非同步回調" 一、概述 說起觀察者模式,也是比較簡單的一種模式了,稍微工作有1年經驗的同學,寫起來都是666... 想看觀察者模式的說明可以直接上 "菜鳥教程|觀察者模式" 這個地址去看。 本篇文章其實就是一個簡單的觀察者模式,只是使用了模板 ...
  • 部分網盤截圖: 下載地址 ...
  • 上一篇文章 "MAT入門到精通(一)" 介紹了MAT的使用場景和基本概念,這篇文章開始介紹MAT的基本功能,後面還有兩篇,一篇是MAT的高級功能,另一篇是MAT實戰案例分析。 三、歡迎頁 使用MAT打開一個heap dump文件,解析完成後,預設會進入歡迎頁,歡迎頁里包含了一些常見的分析:最大記憶體占 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...