算法刷题-动态规划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.mzph.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

作者未提供代码