算法刷題-動態規劃2(繼續)

算法刷題-動態規劃2

  • 珠寶的最高價值
  • 下降路徑最小和
  • 使用最小花費爬樓梯
  • 整數拆分

珠寶的最高價值

題目
在這里插入圖片描述
大佬思路
多開一行使得代碼更加的簡潔

移動到右側和下側
dp[ i ][ j ]有兩種情況:
第一種是從上面來的禮物最大價值:dp[ i ][ j ] = dp[ i - 1 ][ j ] + g[ i ][ j ]
第二種是從左面來的禮物最大價值:dp[ i ][ j ] = dp[ i ][ j - 1 ] + g[ i ][ j ]
所以得出狀態表達式,dp[ i ][ j ] = max( dp[ i ][ j - 1 ],dp[ i - 1 ][ j ] ) + g[ i ][ j ]
2。為了簡潔代碼,多增加一行

class Solution {public int maxValue(int[][] grid) {int m = grid.length;int n = grid[0].length;//dp[i][j]表示從grid[0][0]到grid[i - 1][j - 1]時的最大價值int[][] dp = new int[m + 1][n + 1];for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];}}return dp[m][n];}
}class Solution { 
public: int maxValue(vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); vector<vector<int>> dp(m + 1, vector<int>(n + 1)); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];}}return  dp[m][n]; }
};

下降路徑最小和

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

頭文件: #include< algorithm >
返回值: 兩個函數返回的都是迭代器,所以要提取數值的話需要在函數前加上*
語法格式: max_element(first,end,cmp);其中cmp為可選擇參數(自定義排序可用,默認不需要填)
兩個函數默認都是從小到大排列, max_element() 輸出最后一個值, min_element() 輸出第一個值。
這里要特別注意:如果自定義排序是從大到小的, max_element() 和min_element() 的返回結果相反,也就是說max_element()返回的是最小值,min_element()返回的是最大值 。

  • 定義函數dp[i][j] ,是關于路徑到達 i,j 點的最小值
  • 然后找 關系式,分析最后一點是從哪里得到的, 從左上方來:dp[ i - 1 ][ j - 1 ] + m[ i ][ j ],從正上方來:dp[ i - 1 ][ j ] + m[ i ][ j ], 從右上方來:dp[ i - 1 ][ j + 1 ] + m[ i ][ j ]
class Solution {
public:int minFallingPathSum(vector<vector<int>>& matrix) {int n = matrix.size();vector<vector<int>> dp(n, vector<int>(n));copy(matrix[0].begin(), matrix[0].end(), dp[0].begin());for (int i = 1; i < n; i++) {for (int j = 0; j < n; j++) {int mn = dp[i - 1][j];if (j > 0) {mn = min(mn, dp[i - 1][j - 1]);}if (j < n - 1) {mn = min(mn, dp[i - 1][j + 1]);}dp[i][j] = mn + matrix[i][j];}}return *min_element(dp[n - 1].begin(), dp[n - 1].end());}
//INT_MAX = 2 ^ 31 - 1,INT_MIN = -2 ^ 31.
//防止越界,在左邊,上面和右邊都增加一行
//并且將第一行定義為0
class Solution {
public:int minFallingPathSum(vector<vector<int>>& matrix) {int m = matrix.size(), n = matrix[0].size();vector<vector<int>> dp(m + 1, vector<int>(n + 2, INT_MAX));for (auto& e : dp[0]) e = 0; for (int i = 1; i <= m; i++) {  for (int j = 1; j <= n; j++) {  dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i - 1][j + 1]))+ matrix[i - 1][j - 1];  }}int ans = INT_MAX;  for (const auto& k : dp[m]) ans = min(ans, k);  return ans;  }
};

使用最小花費爬樓梯

題目

使用遞歸操作的幾個步驟
1.明確dp[]函數的含義
2.明確關系式
3.進行初始化操作
4.確定遍歷操作

在這里插入圖片描述

class Solution {//本題是要求跳到最后一個臺階+1的位置public int minCostClimbingStairs(int[] cost) {  int len = cost.length;  //dp表示停留在第i個臺階上的花費  int[] dp = new int[len + 1];  //可以從第一個或第0個臺階起跳  dp[0] = 0;  dp[1] = 0;  //到達第i個臺階要么是從dp[i-2]跳兩個臺階上來,要么從do[i-1]跳一個臺階上來  for (int i = 2; i <= len; i++) {  dp[i] = Math.min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]);}return dp[len];  }

整數拆分

題目
在這里插入圖片描述
遞歸操作

1.確定dp數組含義
dp[i]:分拆數字i,可以得到的最大乘積為dp[i]
2.明確關系式
3.數組初始化
4.遍歷順序

大佬講解
(無敵解釋)

class Solution       {
public:/*** 1. 確定dp數組下標含義 分拆數字i,可以得到的最大乘積為dp[i];* 2. 遞推公式 dp[i] = max(dp[i], (i - j) * j, dp[i - j] * j);* 3. 初始化 dp[2] = 1;* 4. 遍歷順序 從前向后遍歷就可以;* 5. 推導結果;*/int integerBreak(int n) {/* 定義dp數組 */vector<int> dp(n + 1);/* dp數組初始化 */dp[2] = 1;/* 從前向后遍歷 */for (int i = 3; i <= n ; i++) {/* j遍歷到小于i的值 */for (int j = 1; j < i - 1; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));}}return dp[n];}
};

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

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

相關文章

【CCF-PTA】第03屆Scratch第02題 -- 計算天數

計算天數 【題目描述】 一年有 365 天還是有 366 天呢&#xff1f;要看這一年是不是閏年。有個計算方法可以幫助我們判斷&#xff0c;那就是閏年能夠除盡 4 但不能除盡 100 或者能夠除盡 400 的年份。如果這一年是閏年&#xff0c;2 月份的天數就是 29 天。小明決定編寫一個程…

排序算法--希爾排序

實現邏輯 ① 先取一個小于n的整數d1作為第一個增量&#xff0c;把文件的全部記錄分成d1個組。 ② 所有距離為d1的倍數的記錄放在同一個組中&#xff0c;在各組內進行直接插入排序。 ③ 取第二個增量d2小于d1重復上述的分組和排序&#xff0c;直至所取的增量dt1(dt小于dt-l小于……

JSP:Servlet

Servlet處理請求過程 B/S請求響應模型 Servlet介紹 JSP是Servlet的一個成功應用&#xff0c;其子集。 JSP頁面負責前臺用戶界面&#xff0c;JavaBean負責后臺數據處理&#xff0c;一般的Web應用采用JSPJavaBean就可以設計得很好了。 JSPServletJavaBean是MVC Servlet的核心…

【實驗筆記】C語言實驗——降價提醒機器人

降價提醒機器人 題目&#xff1a; 小 T 想買一個玩具很久了&#xff0c;但價格有些高&#xff0c;他打算等便宜些再買。但天天盯著購物網站很麻煩&#xff0c;請你幫小 T 寫一個降價提醒機器人&#xff0c;當玩具的當前價格比他設定的價格便宜時發出提醒。 輸入格式&#xf…

人工智能教程(一):基礎知識

目錄 前言 什么是人工智能&#xff1f; 教學環境搭建 向量和矩陣 前言 如果你是關注計算機領域最新趨勢的學生或從業者&#xff0c;你應該聽說過人工智能、數據科學、機器學習、深度學習等術語。作為人工智能系列文章的第一篇&#xff0c;本文將解釋這些術語&#xff0c;并搭…

k8s部署-kuboard安裝(工具kuboard-spary)

Kuboard-Spray Kuboard-Spray 是一款可以在圖形界面引導下完成 Kubernetes 高可用集群離線安裝的工具 配置要求 對于 Kubernetes 初學者&#xff0c;在搭建K8S集群時&#xff0c;推薦在阿里云或騰訊云采購如下配置&#xff1a;&#xff08;您也可以使用自己的虛擬機、私有云等…

HCIP --- HCIA(部分匯總)--- 點對點網絡

抽象語言 --- 電信號 抽象語言 --- 編碼 編碼 --- 二進制 二進制 --- 電信號 處理電信號 OSI/RM ---- 開放式系統互聯參考模型 --- 1979 --- ISO --- 國際標準化組織 核心思想 --- 分層 應用層 --- 提供各種應用程序&#xff0c;抽象語言轉換成編碼&#xff0c;人機交互…

Docker 命令詳解

1. 容器生命周期管理 命令說明文檔run創建一個新的容器并運行一個命令Docker run 命令start/stop/restart啟動、停止、重啟容器Docker start/stop/restart 命令kill殺掉一個運行中的容器Docker kill 命令rm刪除一個或多個容器Docker rm 命令pause/unpause暫停 恢復容器中所有的…

Arm64版本的centos編譯muduo庫遇到的問題的歸納

環境&#xff1a;Mac m2 pro下的VMware虛擬機中Arm64 centos ./build.sh 執行后提示如下 cmake -DCMAKE_BUILD_TYPErelease -DCMAKE_INSTALL_PREFIX…/release-install-cpp11 -DCMAKE_EXPORT_COMPILE_COMMANDSON /root/package/muduo-master – Boost version: 1.69.0 – Co…

[git] 忽略已經提交的文件或文件夾

文件已經被Git跟蹤 如果某個文件已經被Git跟蹤過&#xff08;即已經添加到版本控制中&#xff09;&#xff0c;.gitignore文件對該文件將不起作用。您需要使用以下命令將該文件從Git中移除&#xff1a; git rm --cached 支持文件夾 -r <文件夾>

Flink Table API 讀寫MySQL

Flink Table API 讀寫 MySQL import org.apache.flink.connector.jdbc.table.JdbcConnectorOptions; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.DataTypes; import org.apache.flink.table.api.Envi…

投資房產的理由與好處,投資買房的方法與技巧

一、教程描述 本套買房教程&#xff0c;大小2.15G&#xff0c;共有23個文件。 二、教程目錄 00.她23歲北漂月薪600&#xff0c;7年后50萬在京買了第一套房&#xff0c;如今身價上千萬.mpg 01.這個游戲&#xff0c;有些人輸了所有錢&#xff0c;一輩子也不明白這個道理.mpg …

CSGO搬磚項目全面講解 ,CSGO搬磚注意事項

steam/csgo搬磚第二課之如何選品 Steam/CSGO游戲搬磚全套操作流程之如何選品&#xff08;第二課&#xff09; 一個游戲只要能搬&#xff0c;只要體量不夠大&#xff0c;很快就會貨幣價格暴跌&#xff0c;直接涼涼。市面上的能穩定手動搬磚的游戲越來越少。所以對于兼職賺點外快…

【Spring】 IoCDI

回顧 企業命名規范 大駝峰:BookDao(首字母都大寫) 類名 小駝峰:bookDao(第一個字母小寫) 方法名 蛇形:book_dao(小寫下劃線_) 數據庫 串形:book-dao(小寫連字符-) 項目文件夾 各種注解 學習Spring MVC, 其實就是學習各種Web開發需要?的到注解 a. RequestMapping: 路由…

[Linux] shell腳本的函數和數組

一、函數 1.1 函數的定義 函數是腳本的別名 作用&#xff1a;函數可以避免代碼重復&#xff0c;可讀性強&#xff0c;可以簡化腳本。 格式&#xff1a;函數名&#xff08;&#xff09;{腳本} 1.2 如何使用函數 1.定義 2.調用 函數一定要先定義再使用 例子&#xff1a…

編譯原理Lab1-用FLEX構造C-Minus-f詞法分析器

HNU編譯原理lab1實驗–根據cminux-f的詞法補全lexical_analyer.l文件&#xff0c;完成詞法分析器。 本文沒有添加任何圖片&#xff0c;但是以復制輸出的形式展現出來了實驗結果。 實驗要求&#xff1a; 根據cminux-f的此法補全lexical_analyer.l文件&#xff0c;完成詞法分析…

國家超級計算濟南中心低代碼平臺應用實踐

摘要&#xff1a;文章主要介紹了濟南超算使用低代碼平臺明道云解決了一系列業務問題&#xff0c;包括資產管理、人員與機構管理、流程制度管理等。通過明道云平臺&#xff0c;濟南超算成功地將不同部門的業務信息進行整合&#xff0c;提高了工作效率和管理水平。文章還強調了明…

計算機端口

前言 計算機端口&#xff08;Port&#xff09;是一種用于在計算機網絡中標識特定服務或應用程序的機制。 端口是一個數字&#xff0c;范圍從0到65535&#xff0c;用于將網絡通信分配給不同的應用程序或服務。 在 Internet 協議套件&#xff08;TCP/IP&#xff09;中&#xff0…

MG-HSF

作者未提供代碼