劍指offer之禮物的最大值

題目描述:
在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大于 0)。你可以從棋盤的左上角開始拿格子里的禮物,并每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?
示例 1:
輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 12
解釋: 路徑 1→3→5→2→1 可以拿到最多價值的禮物

解題思路:
這是一個典型的動態規劃題。用dp[i][j]表示在(i,j)位置可以拿到的禮物的最大價值。由于題目要求拿禮物時只能想右或者向下走,因此我們可以知道在(i,j)位置能拿到的禮物的最大值除了與當前位置的禮物的價值相關,還與路徑中上一個位置拿到的禮物的價值有關,而上一個位置也就是該位置的上邊的格子或者左邊的格子,進而可以得到轉移方程:
dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + grid[i][j]
再處理一下邊界情況。當當前的位置位于矩陣的最左側的一列或者最上面的一行時,該位置拿到的禮物值就是其左側或者上面格子能拿到的禮物的值加上該位置禮物的價值。

class Solution {
public:int maxValue(vector<vector<int>>& grid) {if(grid.size() == 0) return 0;int m = grid.size();int n = grid[0].size();vector<vector<int>> dp(m,vector<int>(n,0));for(int i = 0; i < m ; ++i){for(int j = 0 ; j < n ; ++j){if(i==0&&j==0){dp[i][j] = grid[i][j];}else if(i == 0 && j != 0){dp[i][j] = dp[i][j-1] + grid[i][j];}else if( j == 0 && i != 0 ){dp[i][j] = dp[i-1][j] + grid[i][j];}else{dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + grid[i][j];}}}return dp[m-1][n-1];}
};

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

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

相關文章

為什么叫日上_古雷150萬噸乙烯,為啥叫芒果項目?

古雷150萬噸乙烯&#xff0c;為啥叫芒果項目&#xff1f;福建石油化工集團有限責任公司9月1日在福州舉行的一場新聞通氣會上透露&#xff0c;石化基地引進世界化工巨頭——沙特基礎工業公司(簡稱SABIC)&#xff0c;合資合作共建中沙古雷乙烯項目。中沙古雷乙烯項目將在福建古雷…

Linux學習:第四章-vi編輯器

一vi編輯器簡介vim全屏幕純文本編輯器別名alias命令‘命令別名’ aliasvi’vim’ alias lsls --colorttyls正常顯示顏色 alias lsls --colornever 環境變量配置文件/root/.bashrc 二vim使用 1vi模式 vi文件名 命令模式 輸入模式 末行模式 命令----》輸入a&#xff1a;追加i&…

劍指offer之矩陣中的路徑

題目描述&#xff1a; 請設計一個函數&#xff0c;用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一格開始&#xff0c;每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格&#xff0c;那么該路徑不能再次進入…

gradient設置上下漸變_PaintCode Mac使用教程:如何使用漸變色

Mac平臺上一款強大的iOS矢量繪圖編程軟件PaintCode Mac&#xff0c;無論您是程序員還是設計師&#xff0c;paintcode3能夠讓你像在PS中畫圖一樣繪制各種UI圖形&#xff0c;而且paintcode3會自動幫你生成針對MacOS X或iOS平臺Objective-C或C#代碼&#xff0c;能夠節約大量的編程…

劍指offer之求1+2+...+n

題目描述&#xff1a; 求 12…n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句&#xff08;A?B:C&#xff09;。 示例 1&#xff1a; 輸入: n 3 輸出: 6 示例 2&#xff1a; 輸入: n 9 輸出: 45 來源&#xff1a;力扣&#xf…

opencv計算圖像亮度調節_OpenCV教程創建Trackbar圖像對比度、亮度值調整

這篇文章中我們一起學習了如何在OpenCV中用createTrackbar函數創建和使用軌跡條&#xff0c;以及圖像對比度、亮度值的動態調整。文章首先詳細講解了OpenCV2.0中的新版創建軌跡條的函數createTrackbar&#xff0c;并給上一個詳細注釋的示例。然后講解圖像的對比度、亮度值調整的…

TCP與UDP的區別(未完成,待補充)

TCP&#xff1a;Transport Control Protocol UDP&#xff1a;User Data Protocol TCP相較于UDP有更高的可靠性。TCP相較于UDP需要更多的存儲空間。因為TCP的頭部有20個字節&#xff0c;UDP的頭部只有8個字節。UDP相較于TCP有更高的實時性。TCP基于連接&#xff0c;UDP基于不連…

find linux 目錄深度_浪里淘沙,詳解Linux系統中Find命令的實用技巧

知了小巷&#xff1a;浪里淘沙&#xff0c;詳解Linux系統中Find命令的實用技巧。啊哈&#xff0c;找到了&#xff01;當我們需要在Linux系統上定位某個文件或目錄時&#xff0c;find命令通常是必備之選。它使用起來非常簡單&#xff0c;但有許多不同的可選項&#xff0c;允許我…

劍指offer之從上到下打印二叉樹

從上到下打印出二叉樹的每個節點&#xff0c;同一層的節點按照從左到右的順序打印。 例如: 給定二叉樹: [3,9,20,null,null,15,7], 返回&#xff1a; [3,9,20,15,7] 來源&#xff1a;力扣&#xff08;LeetCode&#xff09; 鏈接&#xff1a;https://leetcode-cn.com/problem…

小米真藍牙耳機說明書_小米真無線藍牙耳機Air2 SE評測:僅需169元,享受隨心暢聽體驗...

繼小米真無線藍牙耳機Air 2、小米真無線藍牙耳機Air 2S之后&#xff0c;小米公司又于2020年5月19日再次推出了一款售價更為親民的真無線藍牙耳機新品——小米真無線藍牙耳機Air2 SE&#xff0c;該機不僅延續了小米真無線藍牙耳機Air 2系列的外觀設計&#xff0c;支持開盒彈窗、…

引用與指針的區別

雖然指針和引用都可以完成對其他對象的間接訪問&#xff0c;但是還是有很多不同之處&#xff1a; 1.本身是否是對象 指針本身就是一個對象&#xff0c;而引用本身不是一個對象。因此允許對指針賦值和拷貝&#xff0c;可以定義對指針的引用&#xff0c;已經指向指針的指針&#…

三點外接圓_故地重游偽切圓——偽外接圓的基本性質

在思考一個有關于偽外接圓的等角線問題時&#xff0c;我回想起偽外接圓的一道小題目&#xff0c;這是2012年羅馬尼亞大師杯的第六題&#xff0c;這道題目直接以結論的形式呈現出了偽外接圓的基本性質&#xff0c;是一道入門偽外接圓必做的精巧小題。當然有些讀者可能從未見過&q…

C++的const限定符

const限定符總是讓人很頭疼&#xff0c;下面講解一下幾個比較容易混淆的概念&#xff1a; 對常量的引用&#xff08;常量引用&#xff09;&#xff1a; 一般情況下&#xff0c;引用的類型要與其所引用的對象的類型一致&#xff0c;其中的例外情況就是&#xff0c;當初始化常量…

Linux學習:第五章-Linux用戶和用戶組管理

一用戶管理命令用戶信息文件&#xff1a;/etc/passwd aa:x:501:501::/home/aa:/bin/bash 第一列&#xff1a;用戶名 第二列&#xff1a;密碼標志 第三列&#xff1a;UID用戶ID 0管理員 1-499系統用戶&#xff08;偽用戶&#xff09; 500普通用戶 第四列&#xff1a;GID初始組ID…

一點等于多少厘米_馬桶知識介紹,你了解馬桶多少

我們可能并不了解我們經常運用的馬桶&#xff0c;認為馬桶便是簡簡單單的規劃&#xff0c;沒什么技術含量。其實不然&#xff0c;馬桶的規劃也包含了不少物理學原理。假如你家里的馬桶出現毛病&#xff0c;首先要排查毛病的原因&#xff0c;但是假如不了解馬桶結構圖那就很難把…

動態內存分配與智能指針

內存分配&#xff1a; 靜態存儲區&#xff1a; 局部static對象類的static數據成員定義在任何函數之外的變量 棧區&#xff1a; 函數內的非static對象 動態內存分配的方式有&#xff1a; new和delete智能指針&#xff08;shared_ptr、unique_ptr、weak_ptr&#xff09;all…

1151壓力變送器型號_日本進口橫河EJA530E壓力變送器型號解讀!

橫河EJA變送器對大家來說也許不陌生&#xff0c;但是對于EJA變送器的型號很多人還不是很懂&#xff0c;因為一個全型號代表這很多參數&#xff0c;每一個字母和每一個數字背后都是一個準確的參數&#xff0c;我們在選型的時候要提供必要的參數&#xff0c;更具參數選出合適的型…

plc控制可調節閥流程圖_PLC控制的水箱液位控制系統畢業論文

內容介紹原文檔由會員 莎士比亞 發布論文標準WORD格式排版40頁摘要在人們生活以及工業生產等諸多領域經常涉及到液位和流量的控制問題, 例如居民生活用水的供應, 飲料、食品加工, 溶液過濾, 化工生產等多種行業的生產加工過程, 通常需要使用蓄液池, 蓄液池中的液位需要維持合適…

idea繼承后重新方法快捷鍵_idea 查看類繼承關系的快捷鍵

類似eclipse ctrlt的快捷鍵,idea中是ctrlH…找到對應的類 查看類關系圖…1.在想要查看的類上按 Ctrl H -> Diagrams -> Show Diagrams -> Java Class Diagrams -> Show Implementations -> Ctrl A -> 右擊一下 -> Enter .…打開想要查看的接口或者類文件…

怎樣在數組末尾添加數據_如何利用C++實現可變長的數組?

應該執行什么功能&#xff1f;假設我們要實現一個將自動擴展的數組類&#xff0c;是否需要實現函數&#xff1f;讓我們從下面主要功能使用的功能開始&#xff0c;看看我們需要實現哪些功能。輸出結果&#xff1a;0 1 2 3 40 1 2 100 4您需要做什么才能實現上述功能&#xff1f;…