算法通关村第十九关 | 青铜 | 动态规划

1.统计路径总数(递归)

原题:力扣62.

每次移动都是将问题规模缩小。

要理解:return search(m - 1, n) + search(m, n - 1);

public class Solution {public int uniquePaths (int m, int n) {return search(m, n);}public int search(int m, int n) {// 就剩一行或一列,只有一条路径,递归结束if (m == 1 || n == 1) {return 1;}// 分解为两个更小的矩阵之和return search(m - 1, n) + search(m, n - 1);}
}

2.使用二维数组优化递归(记忆化搜索)

原题:力扣62.

相同大小的矩阵已经计算过了,就不需要再计算了,这个是记忆化搜索。

public int uniquePaths(int m, int n) {int[][] f = new int[m][n];f[0][0] = 1;// 这里直接循环遍历,因为前边的都算过了for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (i > 0 && j > 0) {f[i][j] = f[i - 1][j] + f[i][j - 1];} else if (i > 0) {f[i][j] = f[i - 1][j];} else if (j > 0) {f[i][j] = f[i][j - 1];}} }return f[m - 1][n - 1];
}

3.滚动数组(一维数组代替二维数组)

原题:力扣62.

滚动数组:反复更新数组。

这样的写法包括了重复子问题,记忆化搜索,滚动数组,是一个简单的动态规划。

公式:dp[j] = dp[j] + dp[j - 1]

public int uniquePaths(int m, int n) {int[] dp = new int[n];Arrays.fill(dp, 1);for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {// dp[j] 用的是上一行的, dp[j - 1] 用的是已经更新的同行的前一位dp[j] = dp[j] + dp[j - 1];}}return dp[n - 1];
}

4.最小路径和(拓展)

原题:力扣64.

状态转移方程:f[i][j] = min{f[i-1][j],f[i][j-1]} + A[i][j]

public int minPathSum(int[][] grid) {int m = grid.length, n = grid[0].length;int[][] f = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (i == 0 && j == 0) {f[i][j] = grid[i][j];} else {int top = i - 1 >= 0 ? f[i - 1][j] + grid[i][j] : Integer.MAX_VALUE;int left = j - 1 >= 0 ? f[i][j - 1] + grid[i][j] : Integer.MAX_VALUE;f[i][j] = Math.min(top, left);}}}return f[m - 1][n - 1];
}

5.三角形最小路径和(拓展)

原题:力扣120.

可以用无后效性来分析是否可以使用动态规划,如果当前状态确定后,之后的状态转移与之前的决策无关,那么就可以使用动态规划。

public int minimumTotal(List<List<Integer>> tri) {int n = tri.size();int ans = Integer.MAX_VALUE;int[][] f = new int[n][n];f[0][0] = tri.get(0).get(0);for (int i = 1; i < n; i++) {for (int j = 0; j < i + 1; j++) {int val = tri.get(i).get(j);f[i][j] = Integer.MAX_VALUE;if (j != 0) {f[i][j] = Math.min(f[i][j], f[i - 1][j - 1] + val);}if (j != i) {f[i][j] = Math.min(f[i][j], f[i - 1][j] + val);}}}for (int i = 0; i < n; i++) {ans = Math.min(ans, f[n - 1][i];}return ans;
}

如果对您有帮助,请点赞关注支持我,谢谢! ❤
如有错误或者不足之处,敬请指正! ❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外包干了4个月,测试技术退步明显

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入杭州某软件公司&#xff0c;干了3年的功能测试&#xff0c;当然有半年是被封在了家里&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我…

牛客网BC107矩阵转置

答案&#xff1a; #include <stdio.h> int main() {int n0, m0,i0,j0,a0,b0;int arr1[10][10]{0},arr2[10][10]{0}; //第一个数组用来储存原矩阵&#xff0c;第二个数组用来储存转置矩阵scanf("%d%d",&n,&m); if((n>1&&n<10)&&am…

LRU算法(面试遇到两次)

原理&#xff1a; 最近最久未使用&#xff08;Least Recently Used LRU&#xff09;算法是⼀种缓存淘汰策略。如果新存入或者访问一个值&#xff0c;则将这个值放在队列开头。如果存储容量超过上限cap&#xff0c;那么删除队尾元素&#xff0c;再存入新的值。新插入的元素…

【学习】卡尔曼滤波

【精 | 有代码】卡尔曼滤波器的直观介绍和手写代码&#xff01; 卡尔曼滤波器的直观介绍&#xff08;第 1 部分&#xff09;: https://www.youtube.com/watch?v5Y-dnt2tNKY 【手写代码一步步展示&#xff01;精&#xff01;强推&#xff01;】Coding Kalman Filter in Pytho…

jmeter,断言:响应断言、Json断言

一、响应断言 接口A请求正常返回值如下&#xff1a; {"status": 10013, "message": "user sign timeout"} 在该接口下创建【响应断言】元件&#xff0c;配置如下&#xff1a; 若断言成功&#xff0c;则查看结果树的接口显示绿色&#xff0c;若…

RocketMQ源码 Broker-TopicConfigManager 元数据管理组件源码分析

前言 ConsumerOffsetManager负责管理Broker端的topicConfig元数据信息&#xff0c;它继承了ConfigManager组件&#xff0c;且定时将内存中维护的topic元数据信息&#xff0c;注册到远程NameServer集群&#xff0c;并持久化到磁盘文件。 源码版本&#xff1a;4.9.3 源码架构图…

12.15

写这段代码改了好几个小时&#xff0c;从有这个想法到完成花费了比较久的时间&#xff0c;也很有成就感。速成课给的伪代码思路漏掉了需要判断最小数是否正好是这个数本身这个条件&#xff0c;所以一直报错。所以写代码要把每种可能性都涵盖&#xff0c;不然程序就会出问题。之…

【渗透测试】常用的8种火狐插件

1、Max HacKBar 推荐理由&#xff1a;免费的hackbar插件&#xff0c;可快速使用SQL注入、XSS和Bypass等payload进行测试&#xff0c;可进行多种编码和解码&#xff0c;安装后F12即可使用。 2、FoxyProxy Standard 推荐理由&#xff1a;FoxyProxy是一个高级的代理管理工具&am…

jmeter,csv文件参数化+断言 实现一个接口的case

1、case 及其 测试数据 注意保存文件的编码格式 id,name,limit,status,address,start_time,assert_status,assert_message 100,小米100,1000,1,某某会展中心101,2023-8-20 14:20,200,add event success ,,,,,,10021,parameter error 100,小米102,1002,1,某某会展中心103,2023-…

十五、YARN辅助架构

1、学习内容 &#xff08;1&#xff09;了解什么是代理服务器 &#xff08;2&#xff09;了解什么是历史服务器 2、辅助架构 &#xff08;1&#xff09;辅助架构的由来 对于YARN架构来讲&#xff0c;除了ResourceManager集群资源总管家、NodeManager单机资源管家两个核心角…

AI日报:谷歌Gemini Pro即将面向企业和开发者

文章目录 总览Gemini介绍 模型能力产品API其他产品Imagen2和其他新闻Duet AI 总览 现在&#xff0c;您可以免费访问Gemini Pro的API&#xff0c;这是谷歌最新大型语言模型的第一个版本。 Gemini 介绍 谷歌通过其API让企业和开发者第一次看到了其最强大的大型语言模型Gemini。…

后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例

接上篇 使用MyBatis配置Mapper实现增删改查 1.Service的基本作用 Service在代码中的的作用是调用Mapper、被Controller调用。是后端项目中非常重要的组件。 用于设计业务流程、业务逻辑&#xff0c;以保障数据的完整性、有效性、安全性。 2. Service使用举例——“添加相册”…

道可云元宇宙每日资讯|上海市长宁区:聚焦元宇宙、区块链等领域

道可云元宇宙每日简报&#xff08;2023年12月14日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 北京丰台举办元宇宙促进数字消费发展交流会 12月13日&#xff0c;北京市丰台区举办元宇宙促进数字消费高质量发展交流会。本次活动以“数字消费元宇宙&#xff0c;妙…

C++/语法@初始化列表

目录 初始化列表特征疑惑区别必在初始化列表中初始化的三种成员变量1、引用成员变量程序例子&#xff1a;运行结果&#xff1a; 2、const成员变量程序例子&#xff1a;运行结果&#xff1a; 3、自定义类型成员&#xff08;没有默认构造函数的类&#xff09;程序例子&#xff1a…

mysql:通过INFORMATION_SCHEMA数据库查询表的元信息

使用SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA database_name AND TABLE_NAME table_name;查询某个表的元信息。其中database_name替换为数据库名称&#xff0c;table_name替换为表的名称。 例如&#xff0c;下面语句&#xff0c;查询development数据库中…

Mirrors and reflections for VR

专为虚拟现实而建,但也非常适合非虚拟现实桌面和移动项目 这是URP管道,从Unity2019.4.16一直测试到2023年。 完全工作场景预览,轻松修改着色器材质。着色器支持折射,可以制作很酷的效果。 镜子/反射可以互相反射,而不仅仅是2...想象一下一个电梯,3面镜子都互相反射,直到…

阿木实验室普罗米修斯项目环境配置

引言 普罗米修斯项目其实只是个大ROS功能包&#xff0c; 里面每个模块就是每个ROS功能包&#xff0c;比如控制模块&#xff0c;视觉模块等等。对PX4配置的与这个一样&#xff0c;另外他是使用自己的P系列无人机&#xff08;我个人是&#xff30;450&#xff09;&#xff0c;所…

腾讯科技Hi Tech Day暨2023数字开物大会:智能涌现将通往无数的未来

腾讯科技讯 12月14日&#xff0c;以“智能涌现 数开万物”为主题的腾讯科技Hi Tech Day暨2023数字开物大会在北京国家会议中心召开&#xff0c;腾讯科技邀请知名院士、知名经济学家、知名大学教授、研究院院长、产业大咖、互联网大厂高管、知名科技领域头部企业高管、产业数字化…

vscode创建代码片段 vue3modal

{// Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope// is left empty or omitte…

干货:企业如何讲好品牌故事

品牌故事讲得好&#xff0c;不仅能够体现品牌特色还能向消费者传递品牌精神的重要工具&#xff0c;优秀的品牌故事能够促进产品销量&#xff0c;为品牌带来曝光率&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;如何讲好品牌故事。 一、 品类历史和故事 品牌虽然是新品牌…